2008-12-11 95 views

回答

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>