2012-02-01 3 views
2
var xml= @"<?xml version='1.0'?> 
       <bookstore> 
       <book genre=""3""> 
        <title>The Gorgias3</title> 
        <author> 
        <name>Plato3</name> 
        </author> 
        <price>3</price> 
       </book> 
      <book genre=""4""> 
        <title>The Gorgias4</title> 
        <author> 
        <name>Plato4</name> 
        </author> 
        <price>4</price> 
       </book> 
      </bookstore>"; 



XPathDocument docNav = new XPathDocument(new StringReader(xml)); 
XPathNavigator navigator = docNav.CreateNavigator(); 
XPathNodeIterator NodeIter = navigator.Select("/bookstore/book/title"); 

foreach (XPathNavigator selectedNode in NodeIter) 
{ 
    Console.WriteLine(selectedNode.Name); 
} 

Как я могу получить доступ прямо к первому ребенку /bookstore/book/title" и получить его значение.Получите только первое значение от XPathNavigator?

Я не хочу повторять и разорвать петлю

результат должен быть "The Gorgias3"

P.S. Я не хочу изменять выражение xpath первым фильтром.

Я хочу знать, как я могу это сделать с помощью C#.

+0

Какой контекст вы задаете вопрос в? - a) зная, что «1-й ребенок» будет титулом - b) таким образом, чтобы вы могли указать, что такое первый ребенок (т. е. название, автор, ...) - я спрашиваю, когда когда Я рассмотрю ваш xml, моя мысль без другой информации будет заключаться в том, что «1-й ребенок» на самом деле и что у указанного ребенка есть дети, перечисленные выше ... – Hardryv

+0

@hardryv thanks edit. –

+0

Его итератор не может просто отбросить на узел и использовать? –

ответ

4

Использование:

var node = navigator.SelectSingleNode("/bookstore/book/title"); 

Console.WriteLine(node); 
+0

Почему навигатор. Выберите ("/ bookstore/book [1]/title [1]"); не wrk? –

+0

@RoyiNamir, Почему? Оно работает. Он возвращает 'XPathNodeIterator', который реализует' IEnumerable'. Таким образом, он возвращает 'IEnumerable' с 1 элементом. –

+0

извините Не знаю, почему я думал, что я видел, что он не работает. –