0

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

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

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

我怎样才能让它只输出一次结果?

4

1 回答 1

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>
于 2013-10-10T07:45:22.790 回答