как добавить узел в XML, контролируя идентификатор атрибута в С#?

У меня есть такой 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=1 после блока данных Child ID=0

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

        }
    }
}
Другие вопросы по тегам