0

これは私の 2 つの 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>

そこで、ここ<w:tblPr>,<w:tblGrid>で paraouterXml を tblMetaInfo の<w:tblPr>,<w:tblGrid>要素に置き換えたいと思います。

これは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]);

しかし、それはいくつかのエラーをスローします...

この問題から抜け出すために私を導いてください...

4

1 に答える 1

4

ArgumentException: newChild は、このノードを作成したドキュメントとは別のドキュメントから作成されました

public XmlNode ReplaceChild(XmlNode newChild, XmlNode oldChild):

newChildが別のドキュメントから作成された場合、を使用XmlDocument.ImportNodeしてノードを現在のドキュメントにインポートできます。その後、インポートされたノードをReplaceChildメソッドに渡すことができます。

于 2012-09-15T09:21:09.097 に答える