0

我有以下 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会失败?!?xpathDocument

4

2 回答 2

2

compile 方法会引发异常,因为您的 XPath 表达式无效。您可能想使用"/application/info/@name".

于 2012-06-04T14:35:51.883 回答
1

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

于 2012-06-04T14:35:20.607 回答