如何用c#中的新元素替换xml元素

时间:2013-09-10 08:47:43

标签: c# xml tags

我想用新的元素替换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#for xml scenario.Thanks.Also,请注意我不想保存这些编辑,并希望使用已编辑的xml运行时来执行API。

1 个答案:

答案 0 :(得分:0)

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

  1. 获取XmlNode(或子类)的实例parent,表示要替换的节点的父元素。
  2. 使用parent.RemoveChild删除旧节点。
  3. 使用parent.AppendChild添加新节点。
  4. (作为#3的替代使用parent.InsertAfterparent.InsertBefore以及对另一个孩子的引用,以将新节点放在其他现有子节点中。)

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