使用更新后的描述,您似乎想要创建一个具有不同组值的下拉列表。这是一个分组问题的示例,在 XSLT 1.0 中,实现这一点的方法是使用一种称为 Muenchian 分组的技术。它是这样的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:key name="kGroup" match="product" use="group"/>
<xsl:template match="/">
<select name="productGroup" id="productGroup">
<xsl:apply-templates
select="dataroot/product[generate-id() =
generate-id(key('kGroup', group)[1])]" />
</select>
</xsl:template>
<xsl:template match="product">
<option value="{group}">
<xsl:value-of select="group"/>
</option>
</xsl:template>
</xsl:stylesheet>
在您的输入 XML 上运行时,它会生成以下内容:
<select name="productGroup" id="productGroup">
<option value="Brakes">Brakes</option>
<option value="Exhaust">Exhaust</option>
<option value="Lighting">Lighting</option>
</select>
然后,您将使用与现在相同的 JavaScript 将结果放入 HTML DOM 中的特定元素中,该元素可以通过其 ID 轻松找到。
现在至于下一步,一旦上述工作正常进行,您将在此下拉列表中放置一个 JavaScript 事件,以便在选择项目时运行另一个转换。您将获得这个选定的值,然后可以将它作为参数值传递给另一个 XSLT。此页面提供了有关在 JavaScript 中将参数传递到 XSLT 的良好信息。XSLT 看起来像这样(再次使用 Muenchian 分组):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:key name="kType" match="product" use="type"/>
<xsl:param name="group" />
<xsl:template match="/">
<select name="productType" id="productType">
<xsl:apply-templates
select="dataroot/product[generate-id() =
generate-id(key('kType', type)[1])][group = $group]" />
</select>
</xsl:template>
<xsl:template match="product">
<option value="{type}">
<xsl:value-of select="type"/>
</option>
</xsl:template>
</xsl:stylesheet>
当参数值“Lighting”作为group
参数传入并在您的输入 XML 上运行时,将产生:
<select name="productType" id="productType">
<option value="Headlamps">Headlamps</option>
<option value="Rear Lights">Rear Lights</option>
</select>