【问题标题】:how to replace xml elements with another xml elements in c#?如何在c#中用另一个xml元素替换xml元素?
【发布时间】:2012-09-15 09:09:36
【问题描述】:

这是我的两个xml文档。

这个xml存储在paraouterXml字符串中。

<w:tbl>
 <w:tblPr>
 </w:tblPr>
 <w:tblGrid>
 </w:tblGrid>
</w:tbl>

这个 xml 存储在 tblMetaInfo 字符串中。

<root>
 <w:tblPr>
  <w:tblStyle w:val="TableGrid" /> 
  <w:tblW w:w="0" w:type="auto" /> 
  <w:tblLook w:val="04A0" /> 
  </w:tblPr>
 <w:tblGrid>
  <w:gridCol w:w="1947" /> 
  <w:gridCol w:w="1947" /> 
  </w:tblGrid>
</root>

所以,在这里我想用 tblMetaInfo 的 &lt;w:tblPr&gt;,&lt;w:tblGrid&gt; 元素替换 paraouterXml 的 &lt;w:tblPr&gt;,&lt;w:tblGrid&gt;

这是 C# 代码...

XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(table.OuterXml);
XmlNode newNode = xDoc.DocumentElement;

XmlNodeList tblPrNode = xDoc.GetElementsByTagName("w:tblPr");
tblPrNode[0].RemoveAll();
XmlNodeList tblGridNode = xDoc.GetElementsByTagName("w:tblGrid");
tblGridNode[0].RemoveAll();

XmlDocument xDoc1 = new XmlDocument();
xDoc1.LoadXml(tblMetaInfo);
XmlNode newNode1 = xDoc1.DocumentElement;
XmlNodeList tblPrNode1 = xDoc1.GetElementsByTagName("w:tblPr");
XmlNodeList tblGridNode1 = xDoc1.GetElementsByTagName("w:tblGrid");

tblPrNode[0].ReplaceChild(tblPrNode1[0], tblPrNode[0]);
tblGridNode[0].ReplaceChild(tblGridNode1[0], tblGridNode[0]);

但它抛出了一些错误......

请指导我摆脱这个问题...

【问题讨论】:

  • 你得到的确切错误是什么?
  • 错误消息是这样的“newChild 是从与创建此节点的文档不同的文档创建的”

标签: c# .net xml c#-4.0 xml-parsing


【解决方案1】:

ArgumentExceptionnewChild 是从与创建此节点的文档不同的文档创建的

public XmlNode ReplaceChild(XmlNode newChild, XmlNode oldChild):

如果 newChild 是从 另一个文档 创建的,您可以使用 XmlDocument.ImportNode 将节点导入到当前文档。然后可以将导入的节点传递给 ReplaceChild 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多