Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > JSTL не пойму как работать с <x:set />


Автор: x4444 25.12.2006, 15:15
Проблема в том, что не могу сохранить текст полученный с помощью xpath в переменную

xml file
Код

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id='js890'>
        <name>Petrov</name>
    </person>
</persons>


JSP код:
Код

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>

<html>
    <body>
        <c:import var="xml" url="sample.xml"/>
        <x:parse varDom="dom" xml="${xml}"/>
        <x:set var="perName" select="$dom/persons/person[@id='js890']/name"/>
        name=<c:out value="${perName}"/>
    </body>
</html>

Результат:
name=[[name: null]] 


Пробовал также 
Код

<x:set var="perName" select="$dom/persons/person[@id='js890']/name/text()"/>

Результат:
name=[[#text: Petrov]] 

И так пробовал
Код

<x:set var="perName" select="string($dom/persons/person[@id='js890']/name/text())"/>

Результат:
name= 


Использую Tomcat 5.5.16
JSTL от Apache 1.1.2

Автор: y3u 25.12.2006, 15:47
а так пробовал?

Код

dom/persons/person[@id='js890']/name

или
Код

${dom}/persons/person[@id='js890']/name


лень качать TLD-шник... но я так подозреваю, что там должОн быть либо XPath вырожение, либо EL вычисляемое выражение...
могу ошибаццо smile

Автор: x4444 25.12.2006, 17:19
нет, это точно неправильно.

никаних {} в select не может быть
а просто dom а не $dom не имеет смысла

да и тут проблема не в том чтобы к переменной dom обратиться - к ней как раз нормально идет обращение - там дальше засада как получить чистый текст и положить его как стринг в переменную. То что написано в учебниках и примерах в инете не работает у меня. Ну апачевская реализация чтоли подводит, я и последний найтбилб пробовал - таже фигня. - либо сложный объект на выходе, либо пусто.

Может кроме аппачевской есть официальная реализация - но на сайте сана что-то не нашел.

Автор: x4444 25.12.2006, 18:54
Нашел свою ошибку. XPath выражение неправильно составил, самую корневую ноду не надо было указывать

Правильный запрос такой
Код

<x:set var="perName" select="string($dom/person[@id='js890']/name)"/>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)