在特定位置插入XML节点

4

我有一个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方法进行插入
  • 插入后是否需要重新排列/排序节点。 请建议。
  • 如何确定结构以及如何找到应根据当前文档结构添加新节点的位置。
3个回答

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

2
您可以使用 XLinq 来修改 XML 文档。
以下是 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

尝试将所有子元素添加到集合中,然后设置值。 - BeginerDummy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接