【发布时间】:2013-05-06 15:45:47
【问题描述】:
我正在自学 Pro XML Development with Java 中的 XPath。为了练习,我构建了一个示例 XML 文档和一些 XPath 表达式。
下面是一些 XPath 表达式及其解释和一些相关问题。如果我的解释有误,请纠正我,并在适用的地方回答问题。
XML
<?xml version="1.0" encoding="UTF-8" ?>
<people>
<student scholarship="Yes">
<name>John</name>
<course>Computer Technology</course>
<semester>6</semester>
<scheme>E</scheme>
</student>
<student>
<name>Foo</name>
<course>Industrial Electronics</course>
<semester>6</semester>
<scheme>E</scheme>
</student>
<grumpy-cat>
<soup-noodle>
<student>
<name>Dingle</name>
<course>Grumpiness</course>
<semester>3</semester>
<scheme>E</scheme>
</student>
</soup-noodle>
</grumpy-cat>
</people>
表达式 1: /people/student[@scholarship='Yes']/name
解释: 将选择 <name>..</name> 包含在 <people> 中的元素,使得 <student> 具有属性命名为 scholarship 的值为 Yes
问题: 这是否也会选择其中的值 John ????
表达式 2: /people/student[2]
解释: 将选择元素 <student>..</student> 在元素 <people> 中的第二个位置
问题: 是否也会选择其中的子节点?
表达式 3: /people/student/@scholarship
说明: 将在元素 student 中选择属性奖学金。如果有多个<student scholarship="">,那么它会选择多个属性
表达式 4: //name[ancestor::student]
解释: 将选择所有 <name>..</name> 元素// 表示“所有后代” .在我的上下文中,它的意思是“我不在乎后代是谁
只要我的直系祖先是学生'
【问题讨论】: