按价值获取数据

时间:2013-04-09 09:14:36

标签: java xpath

我在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中甚至可以进行这样的查询?当然,我非常感谢一个有效的例子:)

1 个答案:

答案 0 :(得分:4)

您当前的实现也提供5678,因为XPath中的|运算符表示“和”:它选择左侧的结果和结果右手边。

你想要的是这样的:

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

其中的内容为“给我所有的学生元素都有一个带有grade=4.0课程的courselist,然后给我index元素的文本内容。