JSTL - использование переменных в xpath? - PullRequest
2 голосов
/ 15 июля 2011

Вот что я хотел бы сделать:

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

Я хочу выбрать узел XML на основе переменной 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

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Найден ответ:

Использование данных JSTL в качестве переменных XPath

Переменные с областью можно использовать в выражениях XPath ($ implicitObject: variableName) аналогично тому, как они используются в EL($ {implicitObject.variableName}).Если неявный объект опущен, области будут искать в стандартном порядке.Обратите внимание, что нотации «.» И «[]» не могут использоваться для доступа к свойствам компонента.

из Краткого справочного листа JSTL (pdf)

Итак, мой код становится:

<x:set var="theNode" select="*[name()=$pageScope:nodeName]" />
<x:out select="$theNode" />
0 голосов
/ 15 июля 2011

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>

Я не пробовал, у меня нет инструментов поблизости. И у меня нет вашего полного кода:)

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...