所以我有这个任务,他们要求 Xslt 提供的数据

这就是我所拥有的:

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

所以 $param0 是由 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>

$param0="name1"的输出
<result name="name1">
 <score>2500</score>
</result>

所以我必须得到所有的分数,我需要保留 xslt 语句,这样我仍然可以选择一个。

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

我希望这能让我更清楚我在寻找什么......

最佳答案

为什么不使用假字符串通配符?

<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 中使用相同的表达式。

关于按属性选择时使用通配符的 Xslt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7270281/

10-09 14:52