Как я могу использовать цель xmlpoke Nant для удаления узла

Исключением, с которым мы столкнулись, было не на локальном, а на удаленном сервере, Azure CI читал его из папки пакетов, но упомянутые выше версии компилятора не были найдены.

Чтобы исправить это мы изменили файл проекта, чтобы сделать его чем-то вроде

. Он не ссылается ни на один из пакетов здесь, непосредственно ссылающийся на переменные среды.

Это исправило проблему, однако в наших случаях мы надеемся 't использовать пакеты непосредственно из "package.config", вместо этого у нас есть отдельная папка для поддержания целостности версий между командами.

15
задан Iain 11 February 2009 в 23:37
поделиться

1 ответ

Я держу мой руки вверх!, Это - классический случай задавания неправильного вопроса.

проблема состоит в том, что Вы не можете использовать xmlpoke для удаления единственного узла. Xmlpoke может только использоваться для редактирования содержания определенного узла или атрибута. Нет изящного способа удалить дочерний узел согласно вопросу с помощью только стандарт цели Nant. Это может быть сделано с помощью некоторых неэлегантных свойств использования обработки строк в Nant, но , почему Вы хотели бы?

лучший способ сделать это должно записать простую цель Nant. Вот тот, который я подготовил ранее:

using System;
using System.IO;
using System.Xml;
using NAnt.Core;
using NAnt.Core.Attributes;

namespace XmlStrip
{
    [TaskName("xmlstrip")]
    public class XmlStrip : Task
    {
        [TaskAttribute("xpath", Required = true), StringValidator(AllowEmpty = false)]
        public string XPath { get; set; }

        [TaskAttribute("file", Required = true)]
        public FileInfo XmlFile { get; set; }

        protected override void ExecuteTask()
        {
            string filename = XmlFile.FullName;
            Log(Level.Info, "Attempting to load XML document in file '{0}'.", filename );
            XmlDocument document = new XmlDocument();
            document.Load(filename);
            Log(Level.Info, "XML document in file '{0}' loaded successfully.", filename );

            XmlNode node = document.SelectSingleNode(XPath);
            if(null == node)
            {
                throw new BuildException(String.Format("Node not found by XPath '{0}'", XPath));
            }

            node.ParentNode.RemoveChild(node);

            Log(Level.Info, "Attempting to save XML document to '{0}'.", filename );
            document.Save(filename);
            Log(Level.Info, "XML document successfully saved to '{0}'.", filename );
        }
    }
}

вышеупомянутое Объединения с модификацией к файл NAnt.exe.config для загрузки пользовательской цели и следующего сценария в сборка файл:

<xmlstrip xpath="//rootnode/childnode[@arg = 'b']" file="target.xml" />

Это удалит childnode с аргументом аргумент со значением b от [1 110] target.xml . Который является тем, что я на самом деле хотел во-первых!

25
ответ дан 1 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: