2010-03-30 7 views
3

Это пример XML из MSDNXMLDOCUMENT SelectNodes (Xpath): Заказ результата

<?xml version="1.0"?> 
<!-- A fragment of a book store inventory database --> 
<bookstore xmlns:bk="urn:samples"> 
    <book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8"> 
    <title>Pride And Prejudice</title> 
    </book> 
    <book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1"> 
    <title>The Handmaid's Tale</title> 
    </book> 
    <book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6"> 
    <title>Emma</title> 
    </book> 
    <book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3"> 
    <title>Sense and Sensibility</title> 
    </book> 
</bookstore> 

Когда я выбираю все книги узлы, используя следующий код, который будет порядок эти узлы имеют?

XmlDocument doc = new XmlDocument(); 
doc.Load("booksort.xml"); 

var nodeList =doc.SelectNodes("bookstore/book"); 

Будет ли порядок элементов в нодлисте не отличаться от порядка в xml? Гарантирован ли этот заказ?

ответ

6

Да. Рассматривая это в рефлекторе, этот метод заканчивается использованием XPathNodeIterator, который документирован для повторения в порядке документа. http://msdn.microsoft.com/en-us/library/1212yhbf.aspx

1

Попробуйте использовать XPathNavigator вместо просто XmlDocument.Select *. Затем вы можете создать экземпляр XPathExpression и сделать его отсортированным через AddSort.

+0

В моем распоряжении нет информации, которую я могу использовать для сортировки. Они должны быть в том же порядке, что и в xml. – crauscher

+1

Другие комментарии здесь утверждают, что SelectNodes возвращают узлы в порядке документа (интересно, верно ли это для xpath union), но я никогда не сталкивался с какими-либо гарантиями в msdn. Спецификации XPath 1.0 также не гарантируют порядок (вы можете увидеть эту ссылку: http://lists.xml.org/archives/xml-dev/200410/msg00005.html). –

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