2008-12-11 135 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>