Всегда получайте ноль при запросе XML с XPath - PullRequest
4 голосов
/ 16 марта 2009

Я использую следующий код для запроса XML с XPath, полученным из потока.

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(false);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(inputStream);
inputStream.close();

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//FOO_ELEMENT");

Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
    System.out.println(nodes.item(i).getNodeValue());

Я проверил поток на содержание, преобразовав его в строку - и все это есть - так что это не так, как будто в потоке нет данных.

Это меня сейчас просто раздражает - поскольку я пробовал разные куски кода и все еще продолжаю печатать 'null' в строке "System.out.println" - что мне здесь не хватает?

ПРИМЕЧАНИЕ. Я хочу видеть текст внутри элемента.

Ответы [ 2 ]

7 голосов
/ 16 марта 2009

В дополнение к предложенному Брабстеру, вы можете попробовать

System.out.println(nodes.item(i).getTextContent());

или

System.out.println(nodes.item(i).getNodeName());

в зависимости от того, что вы собираетесь отображать.

См. http://java.sun.com/javase/6/docs/api/org/w3c/dom/Node.html

4 голосов
/ 16 марта 2009

Не эксперт в Java XPath, но это может помочь.

Javadocs говорят, что результат getNodeValue () будет нулевым для большинства типов узлов.

Не совсем ясно, что вы ожидаете увидеть на выходе; название элемента, атрибуты, текст? Я угадаю текст. В любом используемом мной XPath-выражении, если вы хотите текстовое содержимое узла, вам нужно XPath до

//FOO_ELEMENT/text()

Тогда значением узла является текстовое содержимое узла.

Метод getTextContent () возвращает текстовое содержимое узла, выбранного с помощью XPath, и всех узлов-потомков в соответствии с javadoc. Решение выше выбирает именно текстовый компонент любых узлов FOO_ELEMENT в документе.

Документы Java EE для узла <- старые документы, см. Комментарии к текущим документам. </p>

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