2015-08-03 4 views
1

Мне нужно отсортировать документы xml иногда по атрибутам, иногда по элементам, в зависимости от типа документов. Как я могу использовать один метод sortBy в C# для решения этой проблемы? Большое спасибо за вашу помощь! Например моя сортировка ключ элемент «BookID» или атрибут, и XML-файлы:C# сортировать по элементам или атрибуту одним способом

<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

Вам нужно будет обрабатывать обе возможности в вашем запросе, предполагая, что вы используете 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 
+0

Благодарим за ответ! как-то bookId = book.Attribute ("bookID")! = null soes не работает для меня. Он всегда возвращает true, есть ли атрибут или нет. – user4046073

+0

Является ли «bookID» другого случая в вашем фактическом XML? Я взял оба фрагмента XML (и их нужно было очистить, ваши «имена» не были закрыты должным образом), и код успешно выполнен на каждом из них. –

Смежные вопросы