我觉得我错过了一些明显的东西,但我无法弄清楚为什么我的 XSLT 1.0 密钥对我不起作用。
我想要的输出是"示例品牌"(请参阅下面的 XSLT 中的注释),但根本没有输出任何内容。
我所做的测试似乎表明没有生成密钥,因为当我使用 key()
函数和一些虚拟输出进行for-each
时,也没有输出任何内容(似乎有 0 个关键项目)。但我不确定这一点。
.XML:
<data>
<products-by-instances>
<entry id="1975">
<name>Sample Name</name>
<brand>
<item id="1970">Sample Brand</item>
</brand>
<instances>
<item id="1972">MILT501</item>
<item id="1974">MILT502</item>
</instances>
</entry>
</products-by-instances>
<shopping-cart items="2" total="35">
<item id="1972" num="1" sum="5" />
<item id="1974" num="3" sum="30" />
</shopping-cart>
</data>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="products-by-instance-id" match="/data/products-by-instances/entry" use="instances/item/@id"/>
<!-- other templates redacted for brevity; the below template is being applied -->
<xsl:template match="/data/shopping-cart/item">
<xsl:value-of select="key(products-by-instance-id, @id)/brand/item"/>
<!-- desired output is "Sample Brand" -->
</xsl:template>
现在有人向我指出,我忽略了将键名放在引号中:
<xsl:value-of select="key('products-by-instance-id', @id)/brand/item"/>
密钥现在按预期工作。