c# - 如何在 linq to xml 中交换两个 XML 元素

标签 c# xml linq-to-xml

我想交换两个 xml 元素。我该怎么做呢?这是代码。我尝试了解决方案 here但它毕竟对我不起作用。我想交换这两个元素。当我运行程序时,元素不会交换,但当我调用 ToList() 时,它会在列表中交换,但不会在 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) 实际上创建了一个 y副本,将原来的保留在其现有的位置...准备用 x 替换。

关于c# - 如何在 linq to xml 中交换两个 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740627/

相关文章:

c++ boost xml解析器ptree.get函数——不接受节点名称中的空格

xml - 如何从 googleapi Youtube API 获取 XML 响应

asp.net - 在 ASP.NET 站点中正确使用基于 xml 文件的存储作为数据库替代方案

c# - XElement.Elements().Select() 原因 尝试显式指定类型参数

asp.net - 如何将 xml 文件添加到我的项目中?

c# - 通过 webservice api 更新 Prestashop 中的订单状态

c# - 如何从 IQueryable<T> 获取原始集合

c# - LINQ 中的嵌套通用 Lambda

c# - 如何获得WPF窗口关闭按钮设计?

java - 如何将本地 xml 文件转换为 org.ksoap2.serialization.SoapObject?