c#使用一种方法按元素或属性排序

时间:2015-08-03 01:41:03

标签: c# xml sorting attributes element

我需要有时按属性排序xml文档,有时候按元素排序,具体取决于文档的类型。我如何在c#中使用一个sortBy方法来解决这个问题?非常感谢您的帮助!例如,我的排序键是" bookID"元素或属性,xml文件是:

 <bookstore>
  <book>
    <bookID>100</bookID>
    <name> The cat in the hat <name>
  </book>
  <book>
    <bookID>90</bookID>
    <name> another book <name>
  </book>
  <book>
    <bookID>103</bookID>
    <name> a new book <name>
  </book>
  </bookstore>

或有时xml的格式如下:

<bookstore>
  <book bookID="100">The cat in the hat</book> 
  <book bookID="90">another book</book> 
  <book bookID="103"> a new book</book> 
</bookstore>

1 个答案:

答案 0 :(得分:1)

假设您使用Linq-to-XML,则需要在查询中处理这两种可能性。您可以使用let关键字,但基本思路是检查属性或元素是否为null并使用适当的值。

var books = from book in document.Element("bookstore").Elements("book")
            let bookId = book.Attribute("bookID") != null 
                ? book.Attribute("bookID").Value 
                : book.Element("bookID").Value
            orderby int.Parse(bookId)
            select book; // project properties of book as needed