2013-04-09 3 views
0

Я возился с XPath на Java, и я, кажется, попал в стену. У меня есть следующий XML-документПолучение данных по значению

<?xml version="1.0" encoding="UTF-8"?> 
<database> 

    <student> 
     <index>1234</index> 
     <courselist> 
      <course name="analiza matematyczna 1" grade="5.0"/> 
      <course name="kurs programowania" grade="5.5"/> 
      <course name="logika i struktury formalne" grade="4.0"/> 
     </courselist> 
    </student> 

    <student> 
     <index>5678</index> 
     <courselist> 
      <course name="logika i struktury formalne" grade="5.0"/> 
      <course name="algebra z geometrią analityczną" grade="5.0"/> 
      <course name="kurs programowania" grade="5.5"/> 
     </courselist> 
    </student> 

</database> 

, и я хочу, чтобы получить все номера индекса, которые имеют по крайней мере один 4,0 класса. Я могу выполнять эту задачу отдельно, но не полностью. Я попытался

/database/student/courselist/course[@grade='4.0']/@name | /database/student/index/text() 

, но результат весьма далек от желаемого

[#text: 1234] #good 
name="logika i struktury formalne" #even better, I can display where 4.0 was achieved 
[#text: 5678] #bad, this student doesn't have even one 4.0 

Мой вопрос, если такой запрос можно даже в XPath? Конечно, я был бы очень благодарен за рабочий пример :)

+0

///course[@grade="4.0"]/@name попробуйте это, он дает мне результат corect – eatSleepCode

ответ

4

Ваше текущее выполнение дает 5678, а также, потому что | оператор в XPath означает «и»: он выбирает как результат левой стороны и в результат правой стороны.

То, что вы хотите что-то вроде этого:.

/database/student[courselist/course[@grade='4.0']]/index/text() 

который гласит: «Дайте мне все студенческие элементы, имеющие courselist с курсом с grade=4.0, а затем дать мне текстовое содержимое их index элемента

+0

Большое спасибо, это он :) – Robin92

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