我的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#之后添加同级
发布评论