Добавить атрибут к узлу xml с помощью nant - PullRequest
4 голосов
/ 11 декабря 2008

Есть ли способ добавить атрибут к узлу xml (который у меня есть xpath), используя nant? Пробовал xmlpoke, но похоже, что он может обновлять только существующие атрибуты.

спасибо.

Ответы [ 2 ]

3 голосов
/ 21 октября 2010

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

<script language="C#" prefix="test" >
        <references>
            <include name="System.Xml.dll" />
        </references>
        <code>
            <![CDATA[
              [TaskName("xmlinsertnode")]
              public class TestTask : Task {
                #region Private Instance Fields
                private string _filename;
                private string _xpath;
                private string _fragment;
                #endregion Private Instance Fields

                #region Public Instance Properties
                [TaskAttribute("filename", Required=true)]
                public string FileName {
                    get { return _filename; }
                    set { _filename = value; }
                }

                [TaskAttribute("xpath", Required=true)]
                public string XPath {
                    get { return _xpath; }
                    set { _xpath = value; }
                }

                [TaskAttribute("fragment", Required=true)]
                public string Fragment {
                    get { return _fragment; }
                    set { _fragment = value; }
                }

                #endregion Public Instance Properties

                #region Override implementation of Task
                protected override void ExecuteTask() {
                    System.Xml.XmlDocument document = new System.Xml.XmlDocument();
                    document.Load(_filename);
                    System.Xml.XPath.XPathNavigator navigator = document.CreateNavigator();
                    navigator.SelectSingleNode(_xpath).AppendChild(_fragment);
                    document.Save(_filename);
                }
                #endregion Override implementation of Task
              }
            ]]>
        </code>
    </script>
3 голосов
/ 15 января 2009

XmlPoke определенно не будет работать, потому что xpath должен соответствовать чему-то в первую очередь, чтобы иметь возможность заменить его.

Единственный способ, которым я знаю об этом, - это создать собственную задачу, которая позволила бы вам добавлять данные в XML-файл. Эти новые задачи можно либо собрать отдельно и добавить в NAnt, скопировав dll в папку NAnt \ bin, либо расширив NAnt непосредственно из ваших файлов сборки

Информация для начала находится в Task

Если вам довелось сделать эту задачу достаточно общей, возможно, было бы неплохо попытаться отправить ее на NAntContrib , чтобы всем было выгодно.

...