在特定的XML节点C#之后添加同级

编程入门 行业动态 更新时间:2024-10-24 23:28:02
本文介绍了在特定的XML节点C#之后添加同级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我的xml文档如下:

< root> < parent1> < element1> < / element1> < / parent1> < parent1> < element1> < / element1> < / parent1> < parent1> < element1> < / element1> < / parent1> < parent2> < element1> < / element1> < / parent2> < parent2> < element1> < / element1> < / parent2> < parent3> < element2> < / element2> < / parent3> < / root>

我想在第一个parent2节点之前的最后一个parent1节点之后添加新的parent1节点。 / p>

就像这样:

< root> < parent1> < element1> < / element1> < / parent1> < parent1> < element1> < / element1> < / parent1> < parent1> < element1> < / element1> < / parent1> < parent1> < element1> < / element1> < / parent1> < parent2> < element1> < / element1> < / parent2> < parent2> < element1> < / element1> < / parent2> < parent3> < element2> < / element2> < / parent3> < / root>

我尝试使用XmlDocument SelectSingleNode和AppendChild方法,但它仅在最后一个parent3节点之后添加新子级。

编辑:

我尝试使用以下代码:

string newNode =< parent1 />< element1> 1< / element1>< / parent1 />; XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment(); xmlDocFrag.InnerXml = newNode; XmlElement元素=(XmlElement)xmlDocument.SelectSingleNode(@ // root / parent1 [last()]); 元素。InsertAfter(xmlDocFrag,元素); //->这将引发错误 element.AppendChild(xmlDocFrag); //->此方法有效,但它将新节点插入到最后一个parent1节点内

解决方案

您非常接近,但是您需要的方法是 InsertAfter ,该方法必须在父级上使用。看一下这个例子(注释在代码中)

string xml = @ < root> < parent1> < element1> < / element1> < / parent1> < parent1> < element1> < / element1> < / parent1> < parent1> < element1> < / element1> < / parent1> ; < parent2> < element1> < / element1> < / parent2> < parent2> < element1> ; < / element1> < / parent2> < parent3> < element2> < / element2> < / parent3> < / root> ; XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xml); //您的XML无效。 < parent1 />代替< parent1>和< / parent1 />代替< / parent1> string newNode =< parent1>< element1> 1< / element1>< / parent1>; XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment(); xmlDocFrag.InnerXml = newNode; XmlElement元素=(XmlElement)xmlDocument.SelectSingleNode(@ // root / parent1 [last()]); //找到最后一个parent1元素后,找到它的父元素 XmlNode parent = element.ParentNode; //现在,使用该父元素及其InsertAfter方法将新节点作为同级添加到找到的元素 parent.InsertAfter(xmlDocFrag,element);中。

My xml document looks like this:

<root> <parent1> <element1> </element1> </parent1> <parent1> <element1> </element1> </parent1> <parent1> <element1> </element1> </parent1> <parent2> <element1> </element1> </parent2> <parent2> <element1> </element1> </parent2> <parent3> <element2> </element2> </parent3> </root>

I would like to add a new parent1 node after the last parent1 node before the first parent2 node.

Like this:

<root> <parent1> <element1> </element1> </parent1> <parent1> <element1> </element1> </parent1> <parent1> <element1> </element1> </parent1> <parent1> <element1> </element1> </parent1> <parent2> <element1> </element1> </parent2> <parent2> <element1> </element1> </parent2> <parent3> <element2> </element2> </parent3> </root>

I tried with the XmlDocument SelectSingleNode and AppendChild methods but it only adds the new child after the last parent3 node.

EDIT:

I tried with this code:

string newNode = "<parent1/><element1>1</element1></parent1/>"; XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment(); xmlDocFrag.InnerXml = newNode; XmlElement element = (XmlElement)xmlDocument.SelectSingleNode(@"//root/parent1[last()]"); element.InsertAfter(xmlDocFrag, element); //--> this throws an error element.AppendChild(xmlDocFrag); //--> this works but it inserts the new node inside the last parent1 node

解决方案

you were pretty close, but the method you needed is InsertAfter which has to be used on parent. Take a look at this example (comments are in code)

string xml = @" <root> <parent1> <element1> </element1> </parent1> <parent1> <element1> </element1> </parent1> <parent1> <element1> </element1> </parent1> <parent2> <element1> </element1> </parent2> <parent2> <element1> </element1> </parent2> <parent3> <element2> </element2> </parent3> </root> "; XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xml); //you had invalid xml here. <parent1/> instead of <parent1> and </parent1/> instead of </parent1> string newNode = "<parent1><element1>1</element1></parent1>"; XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment(); xmlDocFrag.InnerXml = newNode; XmlElement element = (XmlElement)xmlDocument.SelectSingleNode(@"//root/parent1[last()]"); //once you found last parent1 element, find it's parent XmlNode parent = element.ParentNode; //now, use that parent element and it's InsertAfter method to add new node as sibling to your found element parent.InsertAfter(xmlDocFrag, element);

更多推荐

在特定的XML节点C#之后添加同级

本文发布于:2023-11-09 23:03:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1573678.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:节点   在特定   XML

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!