【问题标题】:Add attribute to an xml node with nant使用 nant 将属性添加到 xml 节点
【发布时间】:2008-12-11 10:49:05
【问题描述】:

有没有办法使用 nant 将属性添加到 xml 节点(我有 xpath)? 试过 xmlpoke 但它看起来只能更新现有属性。

谢谢。

【问题讨论】:

    标签: xml nant xmlpoke


    【解决方案1】:

    XmlPoke 肯定不起作用,因为 xpath 必须首先匹配某些东西才能替换它。

    我知道这样做的唯一方法是创建自己的任务,允许您将数据添加到 xml 文件。这些新任务可以单独构建并通过将 dll 复制到 NAnt\bin 文件夹中添加到 NAnt,或者直接从构建文件扩展 NAnt

    可在<script/> Task 上找到帮助您入门的信息

    如果您碰巧使此任务足够通用,最好尝试将其提交给NAntContrib,这样每个人都会受益。

    【讨论】:

      【解决方案2】:

      我最近做了类似的东西。这用于插入节点,但应该很容易更改。

      <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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-16
        • 2012-09-25
        • 2019-11-25
        • 1970-01-01
        相关资源
        最近更新 更多