簡體   English   中英

Xml.Linq:反轉 XML 的子節點

[英]Xml.Linq: Reversing child-nodes of a XML

我根據用戶輸入在運行時創建了以下 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 完全相反的方法。

您可以使用反向

例子:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM