使用XPath Java使用唯一条目查询XML不会返回任何内容

时间:2011-03-22 11:17:32

标签: java xml dom xpath

我正在尝试检索XML文件中单个元素的值。我已将XML截断到相关位:

<opt>
    <security>
        <check>
            <secure>true</secure>
        </check>
    </security>
</opt>

我正试图从'secure'元素中检索'true'。

我有以下代码:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder=domFactory.newDocumentBuilder();
Document doc = builder.parse(file);

XPath xpath=XPathFactory.newInstance().newXPath();
XPathExpression expr=xpath.compile("//opt/security/check/secure/text()");

Object result = expr.evaluate(doc, XPathConstants.STRING);
logger.warn(result.toString());

我现在只想获取任何值,并且一旦我开始工作,我就会将String更改为Boolean。

我的输出是空白的,我尝试了很多不同的东西,包括遵循教程和使用NodeLists(虽然这对我来说没有多大意义,因为这是一个独特的元素)。我错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您的代码使用我的JVM中的默认XPath实现(Windows上的Sun / Oracle Java):

>java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)

样本文件中不需要双正斜杠;作为MSDN notes

  

使用双正斜杠(//)的表达式表示可以包含零级或多级层次结构的搜索。

我想知道这是否是命名空间问题:

domFactory.setNamespaceAware(true);

您可以尝试省略此行或providing a NamespaceContext