使用nant向xml节点添加属性

5
有没有办法使用nant向xml节点(我已有xpath)添加属性?尝试了xmlpoke,但似乎只能更新现有属性。谢谢。
2个回答

4
XmlPoke肯定不起作用,因为xpath必须首先匹配某些内容才能被替换。
我所知道的唯一方法是创建自己的任务,允许您向xml文件添加数据。这些新任务可以分别构建,并通过将dll复制到NAnt \ bin文件夹中将其添加到NAnt中,或者直接从构建文件中扩展NAnt。
获取开始的信息可在<script/> Task中找到。
如果您使此任务足够通用,那么尝试将其提交到NAntContrib可能对所有人都有好处。

3

最近我制作了类似的东西。这是用于插入节点的,但应该很容易更改。

<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接