c# - 使用 Linq 对 XML 进行复杂排序

标签 c# xml visual-studio-2010 linq

我已尝试为我的问题找到解决方案,但我在这方面(Linq、XML)的知识相当有限。 :( 找到一个simular construction ,但我需要稍微复杂一点的排序方式。

考虑以下 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 对 中的元素进行排序,还是我必须分解所有 元素并一个一个地对它们进行排序?

更新 我有一个文件,这就是我要完成的。 ;)

<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><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><D>1</D> 之前):

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

通过以上,sorted将是数组的可枚举集合。集合中的每个数组代表一个 <Trans> ,每个这样的数组都包含 <Trans> 的子数组按顺序。

关于c# - 使用 Linq 对 XML 进行复杂排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11117117/

相关文章:

visual-studio-2010 - 复制粘贴在 Visual Studio 解决方案资源管理器中不起作用

c# - 通过 View 中的按钮调用 Controller 的操作而不重定向到任何 View

c# - 从 DataTable 创建 XML

java - 对 (Button)findViewById 的错误感到困惑

asp.net-mvc - 重命名重构对强类型 Razor View 中的某个人有用吗?

c# - VS2010 - 启动选项命令行参数中的项目宏变量

c# - 多线程.NET队列问题

c# - 向 WPF 窗体添加和显示 FixedDocument

c# - 在窗口应用程序中写入命令行

php - XML、PHP 和 CDATA 帮助