使用xpath轴读取父/祖先节点的属性

时间:2015-08-12 12:25:04

标签: xml xslt xpath

我正在尝试使用XPath&读取'student'节点中'class'节点的'division'属性。 XSLT。

<class division="myDiv">
    <student rollno="700">
        <firstname>Renjith</firstname>
        <lastname>R</lastname>
        <nickname>Renju</nickname>
        <marks>70</marks>
    </student>
    <student rollno="493">
        <firstname>fname1</firstname>
        <lastname>lname1</lastname>
        <nickname>nick1</nickname>
        <marks>95</marks>
    </student>
</class>

我的条件是,如果名字是'Renjith',请阅读'class'节点的'division'属性,我相信它是学生节点的父节点。

我使用以下xpath来检查名字是否为'Renjith'

//student[firstname/text() = 'Renjith']

我在学生节点,其名字是'Renjith'。现在我需要从'class'节点获取division属性的值,该节点是学生节点的父节点。 我可以使用以下xpath表达式来实现结果。

1)parent::class/@division
or
2)ancestor::class/@division

我在这里有两个问题 1. b / w表达式有什么区别1&amp; 2?
2.有没有什么方法可以获得'division'属性而不指定父节点名'class'? 我知道'../@division'可以做到这一点。但我的目的是研究xpath轴。

1 个答案:

答案 0 :(得分:1)

..parent::node()的快捷方式,因此parent::node()/@division是使用父轴的详细方式,如果您坚持这样做的话。至于ancestor::class,如果您有嵌套的<class><class><student>..</student></class></class>元素(在语义上可能对您的数据没有意义但在XML中通常是可行的)那么ancestor::class selects both ancestorelements while父元素::类selects only the parent class`。