0

我在用 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 中是否可行?当然,我将非常感谢一个工作示例:)

4

1 回答 1

4

您当前的实现也给出了5678,因为|XPath 中的运算符表示“和”:它同时选择左侧的结果右侧的结果。

你想要的是这样的:

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

其内容为“给我所有具有课程列表的学生元素grade=4.0,然后给我他们index元素的文本内容。

于 2013-04-09T09:30:49.563 回答