2011-11-08 26 views
0

我在Java中使用XSLT变换器。我确定问题在于我输入XSLT语法。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放于字符串内设置了一个param,格式为<xsl:for-each select="level1[@id='$ContentID']">其中$ContentID是xsl:PARAM声明为<xsl:param name="ContentID"/>

所以这是我键控

<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}']"> ,它也失败了。

任何意见大大赞赏。如果你觉得我应该学点东西,请给我链接。感谢您的时间...

回答

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

谢谢 我试图做'的' 和'的 得到您的答案后,但他们没有工作。如果我仍然做错了,你能否请给我一个正确的代码片段?谢谢 – kishu27

+0

谢谢。 Weblogic在某种程度上不能从缓存中重建.class文件并因此产生问题,这在我删除类并重新部署+重新启动 – kishu27

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> 

变量或PARAM将工作方式相同。 becareful你必须删除简单的报价$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> 
+0

感谢您的回复之后起作用。如果我可以在代码段的第二行中通过一个xsl:param来代替'sub-page-1',这将会起作用。 我试过'{{ContentID}''和'{$ ContentID}'也只是'$ ContentID' 但他们都没有工作 – kishu27

+0

谢谢。另一个答案奏效。即使重新启动后,WebLogic也不会重新从jsp创建类文件,这就是为什么更改后的值没有反映出来 – kishu27