【问题标题】:Read attribute of a parent/ancestor node using xpath axes使用 xpath 轴读取父/祖先节点的属性
【发布时间】:2015-08-12 21:09:36
【问题描述】:

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

<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'属性,我认为它是student节点的父节点。

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

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

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

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

我有两个问题。
1. b/w 表达式 1 和 2 有什么区别?
2.有什么方法可以在不指定父节点名称“class”的情况下获得“division”属性? 我知道“../@division”可以解决问题。但我的目的是研究 xpath 轴。

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

    ..parent::node() 的快捷方式,所以parent::node()/@division 是使用父轴的详细方式,如果你坚持这样做的话。至于ancestor::class,如果您嵌套了&lt;class&gt;&lt;class&gt;&lt;student&gt;..&lt;/student&gt;&lt;/class&gt;&lt;/class&gt; 元素(这在语义上可能对您的数据没有意义,但通常在XML 中是可能的)然后ancestor::class selects both ancestorclasselements whileparent::classselects only the parentclass` .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 2013-11-24
      • 1970-01-01
      • 2011-08-26
      相关资源
      最近更新 更多