如何在XPath中检索特定节点的值?

时间:2011-12-15 16:02:04

标签: java xml xpath

我有一个这种格式的XML文件:

<object>
<origin>1:1:1</origin>
<normal>2:2:2</normal>
<leafs>
    <object>
        <origin>1:1:1</origin>
        <normal>3:3:3</normal>
        <leafs>none</leafs>
    </object>
</leafs>
</object>

如何在树的第二层检索元素<leafs>的值“none”?我用过这个

XPathExpression expLeafs = xpath.compile("*[name()='leafs']");
Object resLeafs = expLeafs.evaluate(node, XPathConstants.NODESET);
NodeList leafsList = (NodeList) resLeafs;
if (!leafsList.item(0).getFirstChild().getNodeValue().equals("none"))
         more code...

但它不起作用,因为有一些空文本节点bofore和“none”之后。有没有办法处理它像xpath.compile("*[value()='none']")

2 个答案:

答案 0 :(得分:3)

我刚刚使用您的XML文件和

运行了一个简单的测试程序
expr = xpath.compile("/object/leafs/object/leafs/text()");

并获得所需的“无”结果。如果您有其他要求,则必须编辑您的问题。

答案 1 :(得分:1)

在检查代码行@Lord Torgamus后,我设法解析了我需要的文档:

XPathExpression expLeafs = xpath.compile("*[name()='leafs']");
Object resLeafs = expLeafs.evaluate(node, XPathConstants.NODESET);
NodeList leafsList = (NodeList) resLeafs;

Node nd = leafsList.item(0);

XPathExpression expr = xpath.compile("text()");
Object resultObj = expr.evaluate(nd, XPathConstants.NODE);
String str = expr.evaluate(nd).trim();
System.out.println(str);

,输出为“none”,没有其他空文本节点。