我正在尝试检索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(虽然这对我来说没有多大意义,因为这是一个独特的元素)。我错过了什么吗?
谢谢!
答案 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。