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