【问题标题】:Inserting XML node at specific position在特定位置插入 XML 节点
【发布时间】:2012-05-21 16:20:21
【问题描述】:

我有一个 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 有一些子节点,其中第一个和最后一个子节点名称相同,而除了第一个和最后一个节点之外的其他节点有一些不同的名称(彼此相同)。我正在创建一个在特定位置插入节点的函数,我不确定标准,但可能在中间。

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

【问题讨论】:

    标签: c# asp.net .net xml vb.net


    【解决方案1】:

    这是一个不使用 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 转至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();
      

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 尝试让所有孩子收集并在设定值之后
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-18
        相关资源
        最近更新 更多