簡體   English   中英

如何將linq中的兩個XML元素交換為xml

[英]How to swap two XML elements in linq to xml

我想交換兩個xml元素。 我該怎么做呢? 這是代碼。 我在這里嘗試了該解決方案但畢竟對我不起作用。 我想交換兩個要素。 當我運行程序時,元素沒有被交換,但是當我調用ToList()時,它在List中被交換,但是在doc變量中沒有被交換

<template id="12">
  <tabs>
    <tab>
      <name>test1</name>
      <description />
    </tab>
    <tab>
      <name>test2</name>
      <description />
    </tab>
  </tabs>
</template>

這是交換它們的代碼

        var doc = XDocument.Parse(q.XMLtext);
        var Current = doc.ElementOrDefault("template").ElementOrDefault("tabs").ElementsOrDefault("tab").Where(x => (string)x.Element("name") == name).FirstOrDefault();
        var Previous = Current.PreviousNode as XElement;
        var Next = Current.NextNode as XElement;
        var CurrentName = (string)Current.ElementOrDefault("name");
        var PreviousName = (string)Previous.ElementOrDefault("name");
        var NextName = (string)Next.ElementOrDefault("name");
        if (MoveDirection == (int)MoveType.Up)
        {
            doc.ElementOrDefault("template").ElementOrDefault("tabs").ElementsOrDefault("tab").Where(x => (string)x.Element("name") == CurrentName || (string)x.Element("name") == PreviousName).Reverse();

        }
        else
            //doc.ElementOrDefault("template").ElementOrDefault("tabs").ElementsOrDefault("tab").Where(x => x == Current || x == Next).Take(2).Reverse();

        q.XMLtext = doc.ToString();
        context.SaveChanges();

恐怕我還沒有完全確定要交換的元素,但是我相信XElement.ReplaceWith是您要的對象。 這是一個簡短但完整的程序來演示它:

using System;
using System.Xml.Linq;

class Program
{
    static void Main()
    {
        string xml = @"
<root>
  <element1/>
  <element2/>
  <element3/>
  <element4/>
  <element5/>
</root>";
        XDocument doc = XDocument.Parse(xml);
        XElement x = doc.Root.Element("element2");
        XElement y = doc.Root.Element("element4");
        x.ReplaceWith(y);
        y.ReplaceWith(x);
        Console.WriteLine(doc);
    }
}

這將交換element2element4

請注意,這是x.ReplaceWith(y)因為第一個x.ReplaceWith(y)實際上創建了y副本 ,將原始副本保留在其現有位置...准備x.ReplaceWith(y) x替換。

.Reverse()以相反的順序返回元素。 它不會交換它們。

暫無
暫無

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

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