使用XSL for each从XML中选择一个值

时间:2013-10-10 07:29:51

标签: javascript html xml xslt

我正在尝试从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>

如果我要运行上面的代码并选择阿拉伯语代码,它将产生

رئيس مجلس الدولة المحدودة رئيس مجلس الدولة المحدودة

如何让它只输出一次结果?

1 个答案:

答案 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>