Java Xpath查询在编译时失败

时间:2012-06-04 14:07:13

标签: java xml xpath sax

我有以下XML文档:

<application xmlns="http://www.example.com/schemas/app-config/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.com/schemas/app-config/1.0   http://www.example.com/schemas/app-config/1.0/app-config-1.0.xsd">
    <info name="Dummy Application" runningOn="Dev"/>
</application>

当我运行以下代码时:

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("/application/info@name");

我在XPathExpressionException方法上获得compile。该例外的消息只是“null”。看起来我正确地使用XPath来定位name属性,但是我想知道我的所有XMLNS和XSI声明是否都在这里引起问题?如果没有,那么我完全无能为力,不知道造成这种异常的原因。

有一件事 - 在compile实例与我的实际xpath对象相关联之前,Document如何失败?!

2 个答案:

答案 0 :(得分:2)

编译方法抛出异常,因为您的XPath表达式无效。您可能想要使用"/application/info/@name"

答案 1 :(得分:1)

表达式/application/info@name中只是语法错误,正确的语法是/application/info/@name。但请注意,您的XML示例具有默认命名空间,因此对于XPath 1.0,表达式/application/info/@name不会选择该示例中的任何内容,使用XPath 2.0时,您需要确保关联定义XPath评估的默认命名空间。使用XPath 1.0,您需要为Java代码中的默认命名空间定义前缀(例如df),然后使用例如/df:application/df:info/@name。我不熟悉Java XPath API,所以其他人需要帮助解决如何使用XPathNamespaceContext或类似设置命名空间的具体代码。