2012-05-14 55 views
3

我有一个XML文件,我将它加载到Xmldocument中。这份文件有这样的在特定位置插入XML节点

<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有一些孩子,其中第一个和最后一个子节点的名称是相同的,其中,除了第一个和最后一个节点等节点有一些不同势名称(相同的情况其他)。我正在创建一个函数来插入一个节点在特定的位置,我不确定标准,但可能在中期。

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

回答

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(); 
0
+0

试图让所有的孩子的,以集合:

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); } 

现在,你可以简单如所期望的位置插入一个节点并在此之后设定值 – BeginerDummy

3

这里的例子是一个解决方案不使用LINQ to XML。它实现了XmlNode类的扩展方法:

parentXmlNode.InsertAt(childXmlNode, 7);