Есть ли способ получить значение узла с помощью xPath без этого уродливого сальто? - PullRequest
0 голосов
/ 07 января 2010

Это вопрос Java, кстати.

Я использую xPath, и все отлично работает, пока я не дохожу до последней точки, где я смотрю на набор узлов, который искал, и мне нужно сделать действительно уродливую оценку, чтобы увидеть, являюсь ли я имеет дело с типом ELEMENT или TEXT, прежде чем я смогу получить его значение. Мне было интересно, есть ли метод, аналогичный тому, который я написал ниже, который даст мне значение.

XPathExpression expr = inFeed.getXpath().compile(xPathEx);
Object result = expr.evaluate( rootNode, XPathConstants.NODESET);
NodeList nodeList = (NodeList)result;
ret = "";
for(int i = 0; i< nodeList.getLength() ; i++){
    ret += getNodeValue(nodeList.item(i)) + ",";
}

так ... видите метод getNodeValue ()? Он получает мне строку, которая находится внутри этого узла, и если узел не относится к типу TEXT, он ищет дочерние элементы, и когда он находит узел TEXT, он возвращает его.

Должен быть нативный нодальный способ сделать это, который я пропускаю, верно?

Ответы [ 2 ]

2 голосов
/ 07 января 2010

бах! это было прямо там ... Node.getTextContent (). <roseanne-roseannadanna> nevermind! </roseanne-roseannadanna>

1 голос
/ 07 января 2010

Используя dom4j, вы можете сделать это довольно просто ...

import org.dom4j.Document;
import org.dom4j.io.SAXReader;

SAXReader reader = new SAXReader();
Document doc = reader.read('example.xml');
StringBuilder ret = new StringBuilder();
for (Node n : doc.selectNodes('//book')) {
  if (ret.length() > 0) {
    ret.append(", ");
  }
  ret.append(n.getText());
}

println ret.toString();

(ПРИМЕЧАНИЕ: синтаксис отличный, но в Java он работает так же.)

Метод selectNodes () принимает выражение xpath. Метод getText () возвращает все текстовое содержимое узла, включая его дочерние элементы.

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