在查找元素方面,这是使用xsl:key的理想情况。因此,对于您的示例,您可能想要查找产品的价格,因此您可以像这样定义您的密钥
<xsl:key name="prices" match="productprice" use="refProduct/@id" />
因此,这将允许您通过使用产品 ID 的值来访问productprice元素。具体来说,如果您定位在产品元素上,您将访问密钥以获取总价,如下所示:
<xsl:value-of select="key('prices', @id)/price/@gross" />
至于显示产品,一般来说,通常最好使用xsl:apply-templates而不是xsl:for-each,因为它更符合 XSLT 的“精神”。
<xsl:apply-templates select="products/product" />
可以在多个地方调用模板以减少代码重复,并且可以使代码更具可读性,尤其是通过减少代码缩进。
这是完整的 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="prices" match="productprice" use="refProduct/@id" />
<xsl:template match="/order">
<table>
<xsl:apply-templates select="products/product" />
</table>
</xsl:template>
<xsl:template match="product">
<tr>
<td><xsl:value-of select="@id" /></td>
<td><xsl:value-of select="key('prices', @id)/price/@gross" /></td>
</tr>
</xsl:template>
</xsl:stylesheet>
应用于以下格式良好的 XML 时
<order>
<products>
<product id="1234">
<item quantity="5" colour="red"/>
<item quantity="2" colour="blue"/>
</product>
<product id="9876">
<item quantity="10" colour="teal"/>
</product>
</products>
<prices>
<productprice>
<refProduct id="1234"/>
<price gross="9.99"/>
</productprice>
<productprice>
<refProduct id="9876"/>
<price gross="6.89"/>
</productprice>
</prices>
</order>
以下是输出
<table>
<tr>
<td>1234</td>
<td>9.99</td>
</tr>
<tr>
<td>9876</td>
<td>6.89</td>
</tr>
</table>