XSLT参数不起作用

时间:2011-11-08 23:48:18

标签: java xml xslt transformation

我在Java中使用XSLT Transformer。我确信问题出在我输入XSLT语法的方式。

基本上,我必须看看XML的一个节点中的属性“id”是否等价于一个值,XSL应该处理一个模板。我需要将此测试值作为xsl:param传递。当我在静态值上测试时,它很酷:

<ul class="levelOneNav">
 <xsl:for-each select="level1[@id='sub-page-1']">
  <xsl:call-template name="level1"/>
  </xsl:for-each>
 <div class="clear"></div>
</ul>       

测试部分位于上面的第二行。 AFAIK在字符串中放入一个参数,格式为<xsl:for-each select="level1[@id='$ContentID']">,其中$ContentID是声明为<xsl:param name="ContentID"/>的xsl:param

所以这就是我正在键入的代码

<ul class="levelOneNav">
 <xsl:for-each select="level1[@id='$ContentID']">
  <xsl:call-template name="level1"/>
  </xsl:for-each>
 <div class="clear"></div>
</ul>       

但它不起作用。我也试过使用<xsl:for-each select="level1[@id='{$ContentID}']"> 它也失败了。

任何建议都非常感谢。如果你觉得我应该学点东西,请给我链接。谢谢你的时间......

2 个答案:

答案 0 :(得分:1)

不,那个“AFAIK”就是你错的地方。 XSLT属性中的某些字符串值肯定会接受"{$param}"语法(请注意大括号),但在您的情况下,您所遵循的内容要简单得多:@id=$ContentID

编辑:请注意,'{$ param}'适用于 XSLT属性,请参阅示例:

<xsl:element name="{$namespace}:{$elementName}">
   <xsl:attribute name="{$attrName}"><xsl:value-of select="$value"/></xsl:attribute>
</xsl:element>

答案 1 :(得分:0)

<ul class="levelOneNav">
<xsl:variable name="contentID" select="'sub-page-1'" />
 <xsl:for-each select="level1[@id=$ContentID]">
  <xsl:call-template name="level1"/>
  </xsl:for-each>
 <div class="clear"></div>
</ul>

变量或参数将以相同的方式工作。 因为你必须删除$ContentID周围的简单引用。 如果level1/@id是唯一的,那么你不需要foreach。

下面的例子,将变量作为参数发送。

<ul class="levelOneNav">
    <xsl:variable name="contentID" select="'sub-page-1'" />
     <xsl:for-each select="level1[@id=$ContentID]">
      <xsl:call-template name="level1" >
           <xsl:with-param name="foo" select="$ContenID" />
      </xsl:call-template>
      </xsl:for-each>
     <div class="clear"></div>
</ul>