这是我想做的:
<x:forEach var="node" select="$doc//*[name()='item']"> <x:out select="*[name()='${nodeName}']" /> </x:forEach>
我想基于变量选择一个XML节点nodeName。
nodeName
上面的代码不起作用。我能想到的唯一解决方案是这样的:
<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.variableName})中的用法。如果省略了隐式对象,则将按标准顺序搜索范围。请注意,“。” 和“ []”表示法不能用于访问bean属性。
使用JSTL数据作为XPath变量
作用域变量可以在XPath表达式($ implicitObject:variableName)中使用,类似于它们在EL($ {implicitObject.variableName})中的用法。如果省略了隐式对象,则将按标准顺序搜索范围。请注意,“。” 和“ []”表示法不能用于访问bean属性。
来自JSTL快速参考表(pdf)
所以我的代码变成:
<x:set var="theNode" select="*[name()=$pageScope:nodeName]" /> <x:out select="$theNode" />