2011-07-14 53 views
2

这里是我想怎样做:JSTL - 使用变量在XPath?

<x:forEach var="node" select="$doc//*[name()='item']"> 
    <x:out select="*[name()='${nodeName}']" /> 
</x:forEach> 

我想选择基于变量nodeName一个XML节点。

上面的代码不起作用。唯一的解决办法我能想出是这样的:

<x:forEach var="node" select="$doc//*[name()='item']/*"> 
    <c:set var="nameTest"><x:out select="name($node)" /></c:set> 
    <c:if test="${nameTest == nodeName}> 
     <x:out select="$node" /> 
    </c:if> 
</x:forEach> 

这是不是一个完美的解决方案,实际上让我有种愤怒来看待。

任何人有任何更好的想法吗?

而对于额外的乐趣的时候,我正在使用JSTL 1.0

+0

此代码是不是XSLT的。为什么你将问题标记为“xslt”? –

回答

2

找到了答案:

使用JSTL数据作为XPath的变量

范围变量可以在XPath表达式($ implicitObject:VARIABLENAME)采用类似于它们是如何在EL($ {implicitObject使用。变量名})。如果省略隐式对象,则将按照标准顺序搜索范围。另外,“”和“[]”符号不能被用于访问bean属性。

JSTL Quick Reference Sheet(PDF)

所以我的代码变成:

<x:set var="theNode" select="*[name()=$pageScope:nodeName]" /> 
<x:out select="$theNode" /> 
0

XSLT有它自己的参数卡住了,也许这可以帮助你。我在调用的时候发现这里http://www.roseindia.net/jstl/param-xml-jstl-tag.shtml

我会尽力将这些概念应用到你的例子

... 
<x:forEach select="$doc//*[name()='item']"> 
    <x:out select="*[name()='$nodeName']" /> 
</x:forEach> 
... 

再一个例子:

<x:transform xml="your.xml" xslt="your.xsl"> 
    <x:param name="nodeName" value="${nodeName}" /> 
</x:transform> 

我还没有尝试过,我附近没有工具。而且我没有完整的代码,既不:)

好运。