2011-09-01 117 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,'*')]“' –