如何使用xslt按属性选择元素

Hun*_*nsu 0 xml xslt

我有这个xml文件:

<writer id_writer="1">
  <name>name</name>
</writer>

<film id_writer="1">
</film>
Run Code Online (Sandbox Code Playgroud)

如何使用xslt打印每部电影的作者

<xsl:for-each select="film">
   <xsl:value-of select="writer[@id_writer='what to put here']/name"></xsl:value-of>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

Ian*_*rts 6

在XSLT中解决这种交叉引用的最有效方法通常是使用密钥.键定义位于样式表的顶层,在任何模板之外,并指定要检索的节点以及如何计算每个节点的标识键值

<xsl:key name="writerById" match="writer" use="@id_writer" />
Run Code Online (Sandbox Code Playgroud)

定义密钥后,您可以使用函数按键值检索匹配的节点

<xsl:value-of select="key('writerById', @id_writer)/name"/>
Run Code Online (Sandbox Code Playgroud)

一些XSLT处理器(特别是Saxon EE的最新版本)将自动优化//writer[@id_writer = current()/@id_writer]谓词,以便像显式的基于密钥的方法一样高效地执行,但如果您使用的是旧的或不太复杂的处理器,则不一定要依赖它.