如何通过控制 C# 中的属性 ID 在 XML 中添加节点?

Posted

技术标签:

【中文标题】如何通过控制 C# 中的属性 ID 在 XML 中添加节点?【英文标题】:how to add node in XML by controlling attribute ID in C#? 【发布时间】:2021-03-08 19:06:43 【问题描述】:

我有一个这样的 XML

<Root>
  <Branch>
    <Child Id="0">
      <Reference Name="B0"/>
      <Details Number="2">
        <Detail Height="50"/>
        <Detail Weight="3"/>
      </Details>
    </Child>
    <Child Id="2">
      <Reference Name="B2"/>
      <Details Number="2">
        <Detail Height="55"/>
        <Detail Weight="3.5"/>
      </Details>
    </Child> 
  </Branch>
</Root>

我想在 Child ID=0 数据块之后为 Child ID=1 添加一个新数据块

【问题讨论】:

我正在创建 XmlDocument 并尝试在那里添加块,但我不知道如何搜索确切的 id 并在其后添加数据块 你能贴出你用来解析 xml 的代码吗? 为什么订单是相关的?这不是 XML 的本意。 @Stefan 实际上这是我的代码的简化版本。在这里它不相关,但在我的实际代码中,有必要将它放在其特定位置,因为它是几何数据,所以它有一些参考数据应该在即将到来的代码之前存在。 这能回答你的问题吗? how to add XElement in specific location in XML Document 【参考方案1】:

将新孩子添加到当前列表可能更容易。然后对孩子进行排序。见下面的xml linq代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1

    class Program
    
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        
            XElement newChild = new XElement("Child", new object[] 
                new XAttribute("Id", "1"),
                new XElement("Reference", new XAttribute("Name", "B1")),
                new XElement("Details", new object[] 
                    new XAttribute("Number", "2"),
                    new XElement("Detail", new XAttribute("Height","52")),
                    new XElement("Detail", new XAttribute("Weight","3.25"))
                )
            );

            XDocument doc = XDocument.Load(FILENAME);
            XElement branch = doc.Descendants("Branch").FirstOrDefault();
            branch.Add(newChild);

            List<XElement> orderedChildren = branch.Elements("Child").OrderBy(x => (int)x.Attribute("Id")).ToList();

            XElement newBranch = new XElement("Branch", orderedChildren);

            branch.ReplaceWith(newBranch);

        
    

【讨论】:

以上是关于如何通过控制 C# 中的属性 ID 在 XML 中添加节点?的主要内容,如果未能解决你的问题,请参考以下文章

如何反序列化 C# 中只有属性的 xml 元素?

如何搜索 xml 节点值,然后在 c# 中为该元素创建新属性

如何正确地将 XML 内容映射到 C# 中的 DTO 属性

c# datatable writexml控制列名

如何在 C# 控制台应用程序中使用 XmlTextReader 将 XML 数据插入 SQL Server 表?

通过 id 实例化 dto 对象,其中对象作为有效负载 C#