因为这个问题有点模糊,所以很难给出一个准确的答案,但听起来你可以使用xsl:key来查找你想要的值(或值)。
如果您想查找代码元素但它们的产品/名称,您可以定义一个键,如下所示:
<xsl:key name="lookupcode" match="code" use="following-sibling::product[1]/Name" />
因此,这与代码元素匹配,但允许通过其后的第一个产品元素的“名称”来查找它们。(注意,如果您实际使用命名空间,请记住将相关前缀放在 xxx 之前)。
然后,例如,要使用此键查找“asdf”值的代码,您可以这样做
<xsl:value-of select="key('lookupcode', 'asdf')" />
在一个稍微更实际的例子中,如果你想在zzz下查找NAME元素的代码,你的代码可能看起来像这样:
<xsl:for-each select="zzz/NAME">
Name: <xsl:value-of select="." />
code: <xsl:value-of select="key('lookupcode', .)" />
</xsl:for-each>
在一个稍微更实际的例子中,这里是一个输出 HTML 表格的简单例子。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:key name="lookupcode" match="code" use="following-sibling::product[1]/Name" />
<xsl:template match="yyyy">
<table>
<xsl:for-each select="zzz/Name">
<tr>
<td><xsl:value-of select="." /></td>
<td><xsl:value-of select="following-sibling::DATE[1]" /></td>
<td><xsl:value-of select="key('lookupcode', .)" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
这应该很容易转换为输出 xsl:fo。“tr”元素对应于“fo:table-row”,“td”元素对应于“fo:table-cell”。