2012-05-19 2 views
4

Я начал изучать xpath в w3cschool. Я пытаюсь оценить количество игроков в игре. (Так подсчетом ScreenName и текст() элементы/атрибуты)xpath, count элементы error: «Результат - это NodeSet, содержащий 1 элемент»

Вот мой пример XML:

<game> 
    <info> 
     <name>My Game</name> 
     <description>A <i>very</i> interesting game.</description> 
     <started>2012-03-01T18:00:00Z</started> 
     <players number="2"> 
      <screenname player="1">Alice</screenname> 
      <screenname player="2">Bob</screenname> 
     </players> 
     <rounds>2</rounds> 
     <winner player="2"/> 
    </info> 
</game> 

запрос XPath Я использую:

//game/info/players[count(.//screenname/text())] 

Но я только получаю:

"Result is a NodeSet containing 1 element" 

(инструмент: http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm)

Что вызывает эту ошибку?

ответ

11

Ваш запрос XPath, вероятно, следует:

count(/game/info/players/screenname) 

XPath вы используете теперь просят всех game/info/players узлов, которые имеют ненулевое число screenname/text() потомка узлов. Поскольку существует только один элемент players, результирующий набор узлов содержит только один элемент.

Помните, что XPath представляет собой серию выражений-предикатов оси-нодетеста (axis::nodetest[predicate]), разделенных шагами (/). Только ось-нодетест является частью набора результатов, отправленного на следующий шаг - предикат никогда не появляется в результирующем наборе, потому что он используется только для фильтрации.

+0

Не '// game/info/players [count (.// screenname/text())]' равно '// game/info/players [2]' в этом случае? –

+1

Я нахожу, что это помогает прочитать '[]' в предикате как "такое, что". –

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