我试图在另一个xmlnode之前插入一个xml节点,我有一个例外,说"参考节点不是这个节点的子节点".
这是我的初始xml:
<?xml version="1.0" encoding="utf-8" ?>
<Details xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<sampleData>
<otherNodes></otherNodes>
</sampleData>
</Details>
Run Code Online (Sandbox Code Playgroud)
我想插入下面的XML DATAS(B:dataTobeInserted1,B:dataTobeInserted2和b:dataTobeInserted3)作为的子细节,但之前的sampleData.
Details1.xml
<?xml version="1.0" encoding="utf-8" ?>
<DataInserted1 xmlns:b="http://example.com/data">
<b:dataTobeInserted1>
<b:otherDetails1></b:otherDetails1>
</b:dataTobeInserted1>
</DataInserted1>
Run Code Online (Sandbox Code Playgroud)
Details2.xml
<?xml version="1.0" encoding="utf-8" ?>
<DataInserted2 xmlns:b="http://example.com/data">
<b:dataTobeInserted2>
<b:otherDetails2></b:otherDetails2>
</b:dataTobeInserted2>
</DataInserted2>
Run Code Online (Sandbox Code Playgroud)
Details3.xml
<?xml version="1.0" encoding="utf-8" ?>
<DataInserted3 xmlns:b="http://example.com/data">
<b:dataTobeInserted3>
<b:otherDetails3></b:otherDetails3>
</b:dataTobeInserted3>
</DataInserted3>
Run Code Online (Sandbox Code Playgroud)
我希望我的输出为
<?xml version="1.0" encoding="utf-8" ?>
<Details xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:b="http://example.com/data">
<b:dataTobeInserted1>
<b:otherDetails1></b:otherDetails1>
</b:dataTobeInserted1>
<b:dataTobeInserted2>
<b:otherDetails2></b:otherDetails2>
</b:dataTobeInserted2>
<b:dataTobeInserted3>
<b:otherDetails3></b:otherDetails3>
</b:dataTobeInserted3>
<sampleData>
<otherNodes></otherNodes>
</sampleData>
</Details>
Run Code Online (Sandbox Code Playgroud)
这就是我为实现所需输出所做的工作.
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(@"..\..\initial-Doc.xml");
xmldoc.DocumentElement.SetAttribute("xmlns:b", "http://example.com/data");
XmlDocument detail1 = new XmlDocument();
detail1.Load(@"..\..\DataToBeInserted1.xml");
XmlNode detail1Node = xmldoc.ImportNode(detail1.DocumentElement, true);
XmlDocument detail2 = new XmlDocument();
detail2.Load(@"..\..\DataToBeInserted2.xml");
XmlNode detail2Node = xmldoc.ImportNode(detail2.DocumentElement, true);
XmlDocument detail3 = new XmlDocument();
detail3.Load(@"..\..\DataToBeInserted3.xml");
XmlNode detail3Node = xmldoc.ImportNode(detail3.DocumentElement, true);
xmldoc.InsertBefore(detail1Node, xmldoc.DocumentElement.FirstChild);
xmldoc.InsertBefore(detail2Node, xmldoc.DocumentElement.FirstChild);
xmldoc.InsertBefore(detail3Node, xmldoc.DocumentElement.FirstChild);
xmldoc.Save(@"..\..\initial-Doc-new.xml");
Run Code Online (Sandbox Code Playgroud)
新命名空间是否导致问题?请告诉我哪里出错了.
谢谢Alex
Lar*_*rsH 21
在我看来,问题正是异常所说的:"引用节点不是该节点的子节点." 唯一棘手的部分是找出他们所指的节点.:-)
这里" this node "表示InsertBefore()您正在调用其方法的XmlNode ," reference node "表示InsertBefore()的第二个参数.所以在以下行中:
xmldoc.InsertBefore(detail1Node, xmldoc.DocumentElement.FirstChild);
Run Code Online (Sandbox Code Playgroud)
它说这xmldoc.DocumentElement.FirstChild不是孩子的xmldoc.
这是真的.xmldoc.DocumentElement.FirstChild是个孩子的xmldoc.DocumentElement.
因此,如果您将该行更改为以下内容,则应修复该问题:
xmldoc.DocumentElement.InsertBefore(detail1Node, xmldoc.DocumentElement.FirstChild);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8456 次 |
| 最近记录: |