【问题标题】:How can i replace the xml elements with new elements in c#如何在 c# 中用新元素替换 xml 元素
【发布时间】:2013-09-10 08:47:42
【问题描述】:

我想将 xml 标记中的现有元素替换为新元素。 示例 XML 如下:

<Dr.Watson>
<Bugs>
  <Bug Name="Bug.add --> AAAAAAAAAAAA">
    <criteria>
      <includeFilterSets>
        <filterSet>
          <filter>
            <filterName>PRODUCT_NAME</filterName>
            <operator>
              <name>Equals</name>
            </operator>
            <value>Dr.Watson</value>
          </filter>
        </filterSet>
      </includeFilterSets>
      <grouping>
        <groupBy>
          <name>STATUS</name>
        </groupBy>
      </grouping>
      <caseSensitive>false</caseSensitive>
      <entityToSearch>
        <name>BUG</name>
      </entityToSearch>
    </criteria>
  </Bug>
  </Bugs>
  </Dr.Watson>

到目前为止我的代码:

XmlDocument doc = new XmlDocument();
doc.LoadXml(FilePath_EXPRESS_API_InputFile);
XmlNodeList nodelist = doc.SelectNodes("/Dr.Watson/Bugs/Bug");


//create node and add value
//Console.WriteLine(mxpwr.Value);
XmlNode node = doc.CreateNode(XmlNodeType.Element, "grouping", null);
XmlNode node11 = doc.CreateNode(XmlNodeType.Element, "groupBy", null);
XmlNode node12 = doc.CreateNode(XmlNodeType.Element, "name", null);

//Create Title Node
XmlNode Test_11 = doc.CreateElement("grouping");
XmlNode Test_22 = doc.CreateElement("groupBy");
XmlNode Test_44 = doc.CreateElement("name");

//add value for it
Test_11.InnerText = ("");
Test_22.InnerText = ("");
Test_44.InnerText = ("");

//create Url node
//XmlNode Test_445 = doc.CreateElement("sai");
Test_44.InnerText = ("STATE");

//add to parent node
Test_11.AppendChild(Test_22);
Test_22.AppendChild(Test_44);

//add to elements collection
doc.DocumentElement.AppendChild(Test_11);
Test_11.AppendChild(Test_22);
Test_22.AppendChild(Test_44);

请建议并帮助我,因为我是 c# 的 xml 场景的新手。谢谢。另外,请注意,我不想保存这些编辑,而是想使用编辑后的 ​​xml 运行时来执行 API。

【问题讨论】:

  • 您的问题的确切目的是什么?如果我理解你,你可以在你的原始 XML 上使用 Replace() 方法(如果它仅用于测试)。否则,我真的不知道你的问题是什么。
  • 你就是几个小时前发布几乎完全相同的问题的同一个人,对吧? stackoverflow.com/questions/18696435/…。如果您想要做的唯一 是将“STATUS”更改为“STATE”,然后将整个 xml 读入一个字符串,然后 Replace("STATUS", "STATE") 就完成了!
  • @Corak 谢谢.. 实际上我想创建完整的标签,然后替换,因为我以后需要使用这个工作流程。

标签: c# xml tags


【解决方案1】:

通过 XML-DOM API (XmlDocument et al) 替换节点:

  1. 获取XmlNode(或子类)的实例parent,表示要替换的节点的父元素。
  2. 使用parent.RemoveChild 删除旧节点。
  3. 使用parent.AppendChild 添加新节点。

(作为#3 的替代方法,使用parent.InsertAfterparent.InsertBefore 并引用另一个子节点将新节点放置在其他现有子节点中。)

您在问题中的代码似乎是从头开始构建一个新的 XML 文档:您为什么要替换一个节点 - 只需在第一次创建正确的节点即可。要修改现有 XML 文档,请使用静态 XmlDocument.Load 方法之一来加载和解析现有文档,使用各种搜索和导航方法获取上面#1 中的引用,然后应用上述步骤,最后正常保存.

【讨论】:

  • @理查德。谢谢。实际上我想在 xml 运行时替换以下指定值: STATUS
  • @user2764162 查看我的答案:此过程适用于 任何 节点(及其子节点,如果有)
  • 是这样吗:XmlNode Step1 = doc.ParentNode;定位 节点。
  • 如何使用 parentnode 将 定位为父节点。
  • @user2764162:一种方法是xmlDoc["Bugs"]["Bug"]["criteria"]["grouping"] 使用ItemXmlNode 属性。就我个人而言,我可能会使用 XPath(但这更高级),但这取决于单个文件是否具有多个 &lt;Bug&gt; 元素以及我是否只想要第一个等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多