使用 Linq 对 XML 进行复杂排序

2024-07-01

我尝试为我的问题找到解决方案,但我在该领域(Linq、XML)的知识相当有限。 :( 已经找到一个模拟施工 https://stackoverflow.com/questions/6922180/sort-xmldocument-using-linq,但我需要更复杂的排序方式。

考虑以下 XML 文档:

<Envelope>
    <Body>
        <Table>
            <Trans>
                <B>1</B>
                <A>3</A>
                <C>5</C>
            </Trans>
            <Trans>
                <D>1</D>
                <A>6</A>
                <C>3</C>
            </Trans>
            <Trans>
                <A>1</A>
                <C>3</C>
                <B>5</B>
            </Trans>
        </Table>
    </Body>
<Envelope>

有什么方法可以使用 C#/Linq 对 内的元素进行排序,还是必须分解所有 元素并将它们一一排序?

Update我有一个文件,这就是我想要完成的任务。 ;)

<Envelope>
    <Body>
       <Table>
           <Trans>
               <A>3</A>
               <B>1</B>
               <C>5</C>
           </Trans>
           <Trans>
               <A>6</A>
               <C>3</C>
               <D>1</D>
           </Trans>
           <Trans>
               <A>1</A>
               <B>5</B>
               <C>3</C>
           </Trans>
       </Table>
   </Body>
<Envelope>

这实际上取决于您到底想要做什么(按顺序处理它们,还是对 XML 重新排序?)以及您到底意味着什么“排序”(按标签名称排序?按值排序?)。

如果您只想按顺序处理它们,这就是您对每个内部的所有元素进行排序的方法<Trans>按值 (<D>1</D> before <A>6</A>):

XDocument doc = /* load up your XML */

var sorted = from trans in doc.Descendants("Trans")
             select trans.Children().OrderBy(c => int.Parse(c.Value)).ToArray();

或者,以下是如何按标签名称排序(<A>6</A> before <D>1</D>):

var sorted = from trans in doc.Descendants("Trans")
             select trans.Children().OrderBy(c => c.Name.LocalName).ToArray();

有了上面的内容,sorted将是一个可枚举的数组集合。集合中的每个数组代表一个<Trans>,每个这样的数组都包含<Trans>为了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Linq 对 XML 进行复杂排序 的相关文章

随机推荐

  • 我可以使用什么脚本工具来自动测试 Delphi 程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个用于自动化测试的工具 我将使用脚本进行测试 而不仅仅是自动化 这意味着它不能只发送一些按
  • Webkit 和 jQuery 可拖动跳跃

    作为实验 我创建了几个 div 并使用 CSS3 旋转它们 items position absolute cursor pointer background FFC400 moz box shadow 0px 0px 2px E39900
  • React-native 中针对 Android 和 IOS 的警报

    海我正在尝试显示警报消息 我尝试了不同的方式 例如警报 AlertIOS Alert alert AlertIOS 在 iPhone 中工作 但在 Android 中不起作用 警报也一样 在文档中 我看到 Alert alert 适用于 A
  • 在 Excel 中使用宏在循环中查找和替换

    我有两张纸 表 1 包含以下数据 Sheet 1 Column 1 column 2 Hotel A New York Hotel B Melbourne 我希望用这个值替换表 2 中的值 表2是这样的 Column 1 Column 2
  • Android VpnService - 如何转发拦截的互联网流量?

    我已经关注了这个link https stackoverflow com questions 17766405 android vpnservice to capture packets wont capture packets并使用 Vp
  • 无法从 START_ARRAY 令牌中反序列化对象实例

    我有两个对象 第一个是仪表板 第二个是房间我有一个 json 如下所示 hotel id 1 hotel room 200 hotel properties id 1 room type Single rack rate 2000 publ
  • SQL 查询和 VBA 错误

    我不断收到此错误 BOF or EOF set tu True or the current record has been deleted The requested operation requires a current record
  • 没有要聚合的数字类型 - groupby() 行为发生变化吗?

    我对一些团体代码有问题 我很确定这些代码曾经运行过 在较旧的 pandas 版本上 在 0 9 上 我得到没有要聚合的数字类型错误 有任何想法吗 In 31 data Out 31
  • 在连续 8 个测量到的 GC 抖动周期后关闭 JVM

    我正在编写 Apache beam BAtch 数据流 其中从 GCS 写入到 BQ 我的数据包含400万条记录 我已指定n1 HighMem 8机器类型 我的数据流以少量数据形式工作 我的用例我的模式不固定 所以我使用了 getFaile
  • 在 Node js + Express + Passport + MongoDB 中更新用户记录

    好吧 我已经为此苦苦挣扎了几个小时 但不知道如何让它发挥作用 我按照本教程完成了使用 mongodb express 和 Passport 设置 NodeJS https scotch io tutorials easy node auth
  • TASM 1.4 - 在不清除屏幕的情况下更改背景颜色?

    我正在使用 Tasm 1 4 我试图更改背景和文本的颜色而不清除以前的文本 但尽管颜色发生了变化 但它总是最终会清除以前的文本 例如 mov ah 09h lea dx text1 int 21h displays text1 mov ah
  • Docker:非root用户使用卷时没有写入权限

    我有以下 Dockerfile RUN groupadd r myuser useradd r g myuser myuser RUN mkdir data chmod a rwx data USER myuser 运行图像docker r
  • 在 PostgreSQL 9.6 for windows 32 位上设置托管

    很多天以来 我一直在尝试在我的 postgreSQL 上设置托管 我尝试了很多解决方案 但没有一个有效 我的postgres的版本是9 6 适用于 Windows 32 位与 pgAdmin 4 我已经在我的pg hba conf有多种类型
  • 我应该有一个专门的主键字段吗?

    我正在设计一个供 Web 应用程序使用的小型 SQL 数据库 假设某个特定表有一个 名称 字段 该字段不允许两行具有相同的值 但是 用户可以随时更改名称字段 该表中的主键将用作其他表中的外键 因此 如果 名称 字段用作主键 则任何更改都需要
  • 正则表达式捕获冒号分隔的键值对,具有多行值

    我目前正在 Ruby on Rails 在 Eclipse 中 中开发一个项目 我的任务是使用正则表达式将数据块拆分为相关部分 我决定根据 3 个参数来分解数据 该行必须以大写字母开头 正则表达式等效 A Z 它必须以 正则表达式等效项 我
  • 如何保存带有自定义扩展名 (.sas) 的 TextEdit (mac) 文件?

    因此 我正在为 SAS 编写一些代码 我意识到我必须将文件另存为 filename sas 我的教授提到我必须在计算机上使用记事本或其他文本编辑器 如何在 Mac 上使用 TextEdit 保存 sas 文件 打开 TextEdit 添加一
  • mkoctfile 分段错误

    我正在尝试编译一个example https www gnu org software octave doc interpreter Getting Started with Mex 002dFiles html我在 Octave 中查看
  • 删除第一个注释-MapView iOS

    我正在从事地图视图项目 我有关于从地图视图中删除注释的问题 我已经实现了以下代码 但它随机删除注释 而不是第一个 mapView removeAnnotation self mapView annotations objectAtIndex
  • iOS 以编程方式添加 CardDAV 帐户

    是否可以添加CardDav以编程方式帐户 因为它可以通过手动使用来完成邮件 通讯录 日历 gt 添加帐户选项中Settings app 一般来说 是否可以在代码中添加任何其他类型的帐户 比如兑换账户 我在论坛上的某个地方读到 事实并非如此
  • 使用 Linq 对 XML 进行复杂排序

    我尝试为我的问题找到解决方案 但我在该领域 Linq XML 的知识相当有限 已经找到一个模拟施工 https stackoverflow com questions 6922180 sort xmldocument using linq