2011-07-14 85 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> 

我還沒有嘗試過,我附近沒有工具。而且我沒有完整的代碼,既不:)

好運。