我正在尝试从XML样式表中选择语言。我有多种语言的组合框。我希望能够选择一种语言,然后转换各种innerHTML ID。到目前为止,我已经开始工作,但它遍历每个元素并将其转换为我想要的元素,然后输出所有元素。基本上,我改变了一个标题,但它不是“标题”,而是出现了'标题标题标题',因为有很多子节点。
这是我的XSL
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="text"/>
<xsl:param name="languageToBeSelected" />
<xsl:template match="/newdataset/language">
<xsl:for-each select="/newdataset/language">
<xsl:if test="englishtype = $languageToBeSelected">
<xsl:value-of select="premierlimited" />
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我的XML片段
<newdataset>
<language>
<englishtype>Ukrainian</englishtype>
<premierlimited>Прем'єр обмеженою</premierlimited>
</language>
<language>
<englishtype>Arabic</englishtype>
<premierlimited>رئيس مجلس الدولة المحدودة</premierlimited>
</language>
</newdataset>
如果我要运行上面的代码并选择阿拉伯语代码,它将产生
رئيس مجلس الدولة المحدودة رئيس مجلس الدولة المحدودة
如何让它只输出一次结果?
答案 0 :(得分:3)
在您的XML代码段中,您有两个语言元素,这意味着模板<xsl:template match="/newdataset/language">
会匹配两次,每个元素一个。但是,在此模板中,您使用 xsl:for-each 再次迭代所有语言元素,直到找到匹配项。因为模板被调用两次,所以最终会有两个匹配。
答案只是删除 xsl:for-each
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="text"/>
<xsl:param name="languageToBeSelected" />
<xsl:template match="/newdataset/language">
<xsl:if test="englishtype = $languageToBeSelected">
<xsl:value-of select="premierlimited" />
</xsl:if>
</xsl:template>
</xsl:stylesheet>