XSLT:使用引用元素的值

时间:2018-05-20 13:20:27

标签: xml xslt xpath xslt-2.0

我想得到一个元素的值,它由另一个元素通过唯一的id引用。例如:

<when xml:id="TLI_2" interval="7.683988796743416" since="#T_START"/>
<annotationBlock who="#H-F" start="#TLI_2" end="#TLI_3">
    <u xml:id="Ladida"><incident>
      <desc>TiH</desc>
           </incident><w xml:id="wd1e235">das</w><w xml:id="wd1e237">war</w><w
                    xml:id="wd1e239">die</w><w xml:id="wd1e241">erste</w><w xml:id="wd1e243"
                    >große</w><w xml:id="wd1e245">liebe</w><incident>
                    <desc>schnitt</desc>
                </incident></u>
        </annotationBlock>

我需要匹配属性interval的值。特定的when元素由<annotationBlock>中的属性引用。所以我当前的XSLT-Templates看起来像这样:

<xsl:template match="annotationBlock/u/w">
 <when>
   <xsl:attribute name="interval">
     <xsl:value-of select="../../From here i don't know what to do"/>
<!-- The value should be the value of the interval-attribute of the referenced when-element -->
   </xsl:attribute>
 </when>
</xsl:template>

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

假设您要根据when属性值选择xml:id元素,可以使用id('TLI_2')来执行此操作,以便在具有祖先的w元素的上下文中执行此操作annotationBlock我认为您希望id(ancestor::annotationBlock/@start/substring(., 2))选择when元素,当然还需id(ancestor::annotationBlock/@start/substring(., 2))/@interval来选择其interval属性。

在模板中使用它的一种紧凑方式是在属性值模板

<xsl:template match="annotationBlock/u/w">
 <when interval="{id(ancestor::annotationBlock/@start/substring(., 2))/@interval}">