我有一个XML文件,我将它加载到Xmldocument中。该文档的节点包含一些像这样的子节点
<xml here>
<somenode>
<child> </child>
<children></children>
<children></children>
<children></children> // I need to insert it
<children></children> // I need to insert this second time
<children></children>
<children></children>
<child> </child>
<somenode>
<xml here>
这里somenode有一些子节点,其中第一个和最后一个子节点名称相同,除了第一个节点和最后一个节点之外的其他节点具有一些不同的名称(彼此相同)。我正在创建一个在特定位置插入节点的函数,我不确定标准,但可能在中间。
答案 0 :(得分:3)
这是一个解决方案,不使用LINQ to XML 。它是作为XmlNode
类的扩展方法实现的:
public static void InsertAt(this XmlNode node, XmlNode insertingNode, int index = 0)
{
if(insertingNode == null)
return;
if (index < 0)
index = 0;
var childNodes = node.ChildNodes;
var childrenCount = childNodes.Count;
if (index >= childrenCount)
{
node.AppendChild(insertingNode);
return;
}
var followingNode = childNodes[index];
node.InsertBefore(insertingNode, followingNode);
}
现在,您可以在所需位置插入一个简单的节点:
parentXmlNode.InsertAt(childXmlNode, 7);
答案 1 :(得分:1)
您可以将XLinq用于modify XML document
以下是xml修改的示例
String xmlString = "<?xml version=\"1.0\"?>"+"<xmlhere>"+
"<somenode>"+
" <child> </child>"+
" <children>1</children>"+ //1
" <children>2</children>"+ //2
" <children>3</children>"+ // 3, I need to insert it
" <children>4</children>"+ //4, I need to insert this second time
" <children>5</children>"+
" <children>6</children>"+
" <child> </child>"+
" </somenode>"+
"</xmlhere>";
XElement root = XElement.Parse(xmlString);
var childrens = root.Descendants("children").ToArray();
var third = childrens[3];
var fourth = childrens[4];
third.AddBeforeSelf(new XElement("children"));
fourth.AddBeforeSelf(new XElement("children"));
var updatedchildren = root.Descendants("children").ToArray();
答案 2 :(得分:0)