gpt4 book ai didi

c# - 在最后一个特定节点/元素之后插入 XML 片段

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:52 24 4
gpt4 key购买 nike

我想将 XML 片段添加到 XML 文档的最后一个元素,但我遇到了问题,即我得到的错误是:

"The reference node is not a child of this node".

所以我现有的 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 然后尝试在此节点上插入 After() 是不正确的。最好选择上面的级别,即 MAP,然后是 AppendChild()。见下文:

XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment();
xmlDocFrag.InnerXml = inputXML;

XmlElement mapElement = (XmlElement)xmlDocument.SelectSingleNode(@"//MAP[last()]");
mapElement.AppendChild(xmlDocFrag);

也感谢所有回复和帮助:)

最佳答案

考虑到您需要它来使用 Framework 2.0,这是另一个解决方案:

string xml = "<map><layer>1</layer><layer>2</layer></map>";
string addMe = "<layer>3</layer>";

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);

XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment();
xmlDocFrag.InnerXml = addMe;

XmlElement rootElement = xmlDocument.DocumentElement;
rootElement.AppendChild(xmlDocFrag);

这导致:

<map><layer>1</layer><layer>2</layer><layer>3</layer></map>

关于c# - 在最后一个特定节点/元素之后插入 XML 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6189657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com