C# 在特定位置插入XML节点

C# 在特定位置插入XML节点,c#,asp.net,.net,xml,vb.net,C#,Asp.net,.net,Xml,Vb.net,我有一个XML文件,正在将其加载到Xmldocument中。此文档有一个节点,其中有一些子节点,如下所示 <xml here> <somenode> <child> </child> <children></children> <children></children> <children></children> // I need to inser

我有一个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>

//我需要插入它
//我需要插入第二次
此处,某个节点有一些子节点,其中第一个子节点和最后一个子节点的名称与其他节点相同,但第一个和最后一个节点的名称不同(彼此相同)。我正在创建一个函数以在特定位置插入节点,我不确定标准,但可能在中间

  • 如何在特定位置插入节点。我正在使用XMLnode.appendChild方法进行插入
  • 插入后是否需要重新排列/排序节点。请建议
  • 我如何确定什么是结构,以及如何根据当前文档结构找到新节点应添加的位置
切克!我想这会对你有所帮助。

你可以使用XLinq

下面是一个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();
String xmlString=”“+“”+
""+
"  "+
" 1"+ //1
" 2"+ //2
“3”+//3,我需要插入它
“4”+//4,我需要第二次插入
" 5"+
" 6"+ 
"  "+
" "+
"";
XElement root=XElement.Parse(xmlString);
var childrens=root.substands(“children”).ToArray();
var third=儿童[3];
var第四=儿童[4];
第三,在自己之前添加(新元素(“儿童”);
第四,在自己之前添加(新元素(“儿童”);
var updatedchildren=root.substands(“children”).ToArray();

这里有一个解决方案,不使用LINQ to XML。它是作为
XmlNode
类的扩展方法实现的:

公共静态void InsertAt(此XmlNode节点,XmlNode insertingNode,int index=0)
{
if(insertingNode==null)
返回;
如果(指数<0)
指数=0;
var childNodes=node.childNodes;
var childrenCount=childNodes.Count;
如果(索引>=childrenCount)
{
追加子节点(插入节点);
返回;
}
var followNode=子节点[索引];
node.InsertBefore(insertingNode,followernode);
}
现在,您可以在所需位置插入一个节点,如下所示:

parentXmlNode.InsertAt(childXmlNode,7);

尝试将所有的孩子都收集到集合中,然后设置值