2013-10-10 37 views
0

我試圖從XML樣式表中選擇語言。我有多種語言的組合框。我希望能夠選擇一種語言,然後轉換各種innerHTML ID。到目前爲止,我已經得到它的工作,但它貫穿每一個元素,並將其轉換成我想要的,然後輸出所有元素。基本上,我改變了一個標題,而不是'標題'它出現爲'標題標題標題',爲許多子節點。從XML中選擇一個值與每個

這裏是我的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> 

的片斷如果我是運行上面的代碼,並選擇阿拉伯語一個它會產生

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

我怎樣才能得到它只輸出一次結果?

回答

3

在您的XML片段中,您有兩個語言元素,這意味着模板<xsl:template match="/newdataset/language">獲得匹配兩次,每個元素一次。但是,在此模板中,您正在使用xsl:for-each來重複遍歷所有語言元素,直到找到匹配項爲止。由於模板被調用兩次,最終會有兩個匹配項。

答案很簡單,刪除的xsl:for-每個

<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> 
+0

OMG!我想擁抱並親吻你。我覺得很愚蠢。 – Tom