Xml .Linq: обращение дочерних узлов XML - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть следующий XML файл, созданный во время выполнения согласно пользовательскому вводу.

<Parent>
    <X1>1</X1>
    <X2>
        <Y1>
            <Rank>4</Rank>
        </Y1>
        <Y1>
            <Rank>3</Rank>
        </Y1>
        <Y1>
            <Rank>2</Rank>
        </Y1>
        <Y1>
            <Rank>1</Rank>
        </Y1>
    </X2>
</Parent>

Теперь я хочу повернуть дочерний узел таким образом, чтобы <Rank> располагался в порядке возрастания. Я хочу следующий вывод

<Parent>
    <X1>1</X1>
    <X2>
        <Y1>
            <Rank>1</Rank>
        </Y1>
        <Y1>
            <Rank>2</Rank>
        </Y1>
        <Y1>
            <Rank>3</Rank>
        </Y1>
        <Y1>
            <Rank>4</Rank>
        </Y1>       
    </X2>
</Parent>

Эта проблема создана, потому что я использую метод AddFirst. Я не нашел ни одного метода, который бы являлся полной противоположностью AddFirst.

1 Ответ

1 голос
/ 05 февраля 2020

Вы можете использовать Реверс

Пример:

static void Main(string[] args)
{
    XElement srcTree = new XElement("Parent",
                new XElement("X1", 1),
                new XElement("X2",
                    new XElement("Y1", new XElement("Rank", 4)),
                    new XElement("Y1", new XElement("Rank", 3)),
                    new XElement("Y1", new XElement("Rank", 2)),
                    new XElement("Y1", new XElement("Rank", 1)))
            );

    var reverseList = srcTree.Elements("X2").Descendants("Y1").InDocumentOrder().Reverse().ToList();

    srcTree.Element("X2").Remove();
    srcTree.Add(new XElement("X2", reverseList));


    Console.WriteLine(srcTree);
    Console.ReadLine();
}

Это даст вам желаемый результат:

<Parent>
  <X1>1</X1>
  <X2>
    <Y1>
      <Rank>1</Rank>
    </Y1>
    <Y1>
      <Rank>2</Rank>
    </Y1>
    <Y1>
      <Rank>3</Rank>
    </Y1>
    <Y1>
      <Rank>4</Rank>
    </Y1>
  </X2>
</Parent>
...