2012-05-14 187 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);