有没有办法在没有这个丑陋的翻筋斗的情况下使用xPath获取节点值?

时间:2010-01-07 19:59:35

标签: java xpath

这是一个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节点时,它会返回该节点。

必须有一个Node本地方式才能做到这一点,我忽略了,对吧?

2 个答案:

答案 0 :(得分:2)

呸!它就在那里...... Node.getTextContent()。 <roseanne-roseannadanna> nevermind! </roseanne-roseannadanna>

答案 1 :(得分:1)

使用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();

(注意:语法是groovy,但它在Java中的工作方式相同。)

selectNodes()方法采用xpath表达式。 getText()方法返回Node的所有文本内容,包括其子节点。