我想向XML文档的最后一个元素添加XML片段,但我遇到了问题,即我收到的错误是:
“引用节点不是此节点的子项”。
因此,我的现有XML文档如下所示:
<MAP>
<LAYER name ="My first Layer">
<DATASET name="foo dataset" />
<SYMBOLOGY>
<SYMBOL colour="red" />
</SYMBOLOGY>
</LAYER>
<LAYER name="My second Layer">
<DATASET name="bar dataset" />
<SYMBOLOGY>
<SYMBOL colour="blue" />
</SYMBOLOGY>
</LAYER>
</MAP>
我想要插入到最后一个LAYER元素后面的XML片段是:
<LAYER name="My third Layer">
<DATASET name="whatever dataset" />
<SYMBOLOGY>
<SYMBOL colour="yellow" />
</SYMBOLOGY>
</LAYER>
我使用的代码是:
我正在使用以下代码:
XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment();
xmlDocFrag.InnerXml = inputXML; //which is basically the third layer example - see above.
XmlElement rootElement = xmlDocument.DocumentElement;
XmlNode lastLayerNode = rootElement.SelectSingleNode(@"//LAYER[last()]");
rootElement.InsertAfter(xmlDocFrag, lastLayerNode); //error raised here.
非常感谢您的提问。我认为我的XPath查询似乎是正确的,它选择了正确的最后一层,只是由于某种奇怪的原因它不会在它之后插入。 更新/解决方案 - 如何使用XPATH实现此操作 最终在XPath中找到了解决方法 - 请参见下面的代码,我认为问题在于一开始没有选择正确的父节点,选择最后一个LAYER然后尝试在该节点上执行InsertAfter()是错误的。更好的方法是选择上一级即MAP,然后执行AppendChild()。请参考以下内容:
XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment();
xmlDocFrag.InnerXml = inputXML;
XmlElement mapElement = (XmlElement)xmlDocument.SelectSingleNode(@"//MAP[last()]");
mapElement.AppendChild(xmlDocFrag);
感谢所有的回复和帮助 :)