2013-05-25 4 views
0

Я этот пример XML сохраняется в books.xml:C# узел Синтаксический XML с XPathNavigator

<?xml version="1.0" encoding="utf-8" ?> 
<catalog> 
    <book id="bk101"> 
    <author>Gambardella, Matthew</author> 
    <title>XML Developer's Guide</title> 
    <genre>Computer</genre> 
    <price>44.95</price> 
    <publish_date>2000-10-01</publish_date> 
    <description> 
     An in-depth look at creating applications 
     with XML. 
    </description> 
    </book> 
    <book id="bk102"> 
    <author>Ralls, Kim</author> 
    <title>Midnight Rain</title> 
    <genre>Fantasy</genre> 
    <price>5.95</price> 
    <publish_date>2000-12-16</publish_date> 
    <description> 
     A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world. 
    </description> 
    </book> 
</catalog> 

Я создал документ и навигатор, как так:

var document = new XPathDocument(@"books.xml"); 
var navigator = document.CreateNavigator(); 
var books = navigator.Select("/catalog/book"); 

Я пытаюсь смотреть через узлы книги и проанализировать контекст узла. Я могу читать атрибуты, но не могу понять, как читать значение узла:

while (books.MoveNext()) 
{ 
    var location = books.Current; 
    var book = new Book(); 
    book.Id = location.GetAttribute("id", ""); 

    // this line throws an exception. 
    book.Title = (string)location.Evaluate("title/text()") ; 
} 

Любого с некоторыми идеями о том, что я пропустил из documentation?

Пожалуйста, мне известны методы анализа XElement, XmlDocument и XmlTextReader, но вам нужно выяснить, как работает XPathNavigator для целей сравнения производительности.

TIA.

ответ

1

Чтобы получить узел и его значение, которое вы должны использовать SelectSingleNode() метод, как это ...

var node = location.SelectSingleNode("title"); 
book.Title = node != null ? node.Value : string.Empty; 

На производительность, вот некоторые предыдущие вопросы:

Which is the best for performance wise: XPathNavigator with XPath vs Linq to Xml with query?

How big is the speed difference between XPathNavigator and XmlReader, really?

+0

Спасибо. Это именно то, что мне нужно. –

0

Вы пробовали XmlReader?

var reader = new XmlReader(""); 
while(reader.ReadToFolowing("book")){ 
    reader.ReadInnerXml(); 
} 
Смежные вопросы