2011-09-01 172 views
4

時選擇使用通配符,所以我有這樣的任務,他們所要求的由XSLTXSLT通過屬性

給出的數據這是我的本錢:

<xsl:apply-templates select="results/result[@name=$param0]"/> 

所以$參數0給出通過jQuery轉換功能。我的問題是,如何在爲$ param0發送特定值時選擇所有的@name?我試過大多數通配符,但似乎沒有任何工作。 你們能幫我嗎?

輸入XML

<results> 
<result name="name1"> 
    <score>2500</score> 
</result> 
<result name="name2"> 
    <score>13500</score> 
</result> 
<result name="name3"> 
    <score>65100</score> 
</result> 
</results> 

輸出參數0 $ =「名稱1」

<result name="name1"> 
<score>2500</score> 
</result> 

所以我不得不把所有的分數,我需要保持XSLT語句,這樣我還是可以選擇一個。

輸出$參數0 =「通配符」 < ==我需要某種形式的通配符(曾嘗試了很多他們的)

<result name="name1"> 
    <score>2500</score> 
</result> 
<result name="name2"> 
    <score>13500</score> 
</result> 
<result name="name3"> 
    <score>65100</score> 
</result> 

我希望這是一個更清楚什麼我在尋找..

回答

4

爲什麼不使用假字符串通配符

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:param name="param0" select="'*'"/> 

    <xsl:template match="/"> 
     <xsl:copy-of select="results/result[@name=$param0 and $param0!='*'] 
      | 
      results/result[$param0='*']"/> 
    </xsl:template> 

</xsl:stylesheet> 

它複製每結果$param0='*',否則副本時,有一個像$param0='name1'匹配想要的節點;否則它根本不復制任何東西。

您可以在xsl:apply-templates中使用相同的表達式。

+1

Omg我現在覺得很愚蠢..謝謝你的回答! – Sentinel

+0

這只是一個伎倆。 –

+2

我認爲可以簡化爲''或者在XPath 2.0中,'select =「results /結果[$ param0 =(@ name,'*')]「' –