我有这个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)
在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]谓词,以便像显式的基于密钥的方法一样高效地执行,但如果您使用的是旧的或不太复杂的处理器,则不一定要依赖它.
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |