有没有办法使用 nant 向 xml 节点(我有 xpath)添加属性?试过 xmlpoke 但它看起来只能更新现有属性。
谢谢。
XmlPoke 肯定不起作用,因为 xpath 必须首先匹配某些东西才能替换它。
我知道这样做的唯一方法是创建自己的任务,允许您将数据添加到 xml 文件。这些新任务可以单独构建并通过将 dll 复制到 NAnt\bin 文件夹中添加到 NAnt,或者直接从构建文件扩展 NAnt
可以在<script/> 任务中找到帮助您入门的信息
如果您碰巧使此任务足够通用,那么尝试将其提交给NAntContrib可能会很好,这样每个人都会受益。
我最近做了类似的东西。这是用于插入节点,但应该很容易更改。
<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>