我在Java中乱用XPath,我似乎碰壁了。我有以下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 :(得分:4)
您当前的实现也提供5678
,因为XPath中的|
运算符表示“和”:它选择左侧的结果和结果右手边。
你想要的是这样的:
/database/student[courselist/course[@grade='4.0']]/index/text()
其中的内容为“给我所有的学生元素都有一个带有grade=4.0
课程的courselist,然后给我index
元素的文本内容。