在特定位置插入 XML 节点

Posted

技术标签:

【中文标题】在特定位置插入 XML 节点【英文标题】:Inserting XML node at specific position 【发布时间】: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 方法进行插入 插入后是否需要重新排列/排序节点。请建议。 如何确定什么是结构,以及如何根据当前文档结构找到应该添加新节点的位置。

【问题讨论】:

【参考方案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】:

http://www.c-sharpcorner.com/Forums/Thread/55428/how-to-insert-xml-child-node-programmatically.aspx 看看吧!我想它会对你有所帮助。

【讨论】:

尝试让所有孩子收集并在设定值之后

以上是关于在特定位置插入 XML 节点的主要内容,如果未能解决你的问题,请参考以下文章

在 xml 文件中的特定节点之后插入一个节点

在处理 XML 时,如何在特定节点之后插入一个节点?

在链表中递归插入节点,给定位置和值

C#在xml文件中指定节点插入节点和属性

在单链表中的特定节点之前插入一个节点

XML : 在特定节点之间添加节点