JSTL - 使用变量在XPath?
问题描述:
这里是我想怎样做: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
答
找到了答案:
使用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" />
答
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>
我还没有尝试过,我附近没有工具。而且我没有完整的代码,既不:)
好运。
此代码是不是XSLT的。为什么你将问题标记为“xslt”? –