4
A
回答
3
XmlPoke絕對不會工作,因爲xpath必須首先匹配某些東西才能替換它。
我知道這樣做的唯一方法是創建自己的任務,允許您將數據添加到xml文件。這些新任務,既可以單獨建立並添加到南特複製的DLL到南特\ bin文件夾,或直接從您的構建文件擴展楠
讓你開始在<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>