Java XPath:使用默认名称空间xmlns的查询

我要对此文件执行XPath查询(显示的摘录):

<?xml version="1.0" encoding="UTF-8"?>

<!-- MetaDataAPI generated on: Friday, May 25, 2007 3:26:31 PM CEST -->

<ModelClass xmlns="http://xml.sap.com/2002/10/metamodel/webdynpro" xmlns:IDX="urn:sap.com:WebDynpro.ModelClass:2.0">

<ModelClass.Parent>

<Core.Reference package="com.test.mypackage" name="ModelName" type="Model"/>

这是我正在使用的代码的摘要:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = domFactory.newDocumentBuilder();

Document document = builder.parse(new File(testFile));

XPathFactory factory = XPathFactory.newInstance();

XPath xpath = factory.newXPath();

xpath.setNamespaceContext( new NamespaceContext() {

public String getNamespaceURI(String prefix) {

...

String result = xpath.evaluate(xpathQueryString, document);

System.out.println(result);

我面临的问题是,在XPath查询中引用默认名称空间时,不会调用getNamespaceURI方法来解决它。例如,此查询不提取任何内容:

//xmlns:ModelClass.Parent/xmlns:Core.Reference[@type=\"Model\"]/@package

现在,我尝试通过用xmlns假前缀替换来“诱骗”解析器d,然后相应地编写getNamespaceURI方法(以便http://xml.sap.com/2002/10/metamodel/webdynprod遇到问题时返回)。在这种情况下,将getNamespaceURI调用,但是XPath表达式求值的结果始终是一个空字符串。

如果我从文件和XPath查询表达式中删除名称空间,则可以获得所需的字符串(com.test.mypackage)。

有没有办法使默认名称空间正常工作?

回答:

在您的Namespace上下文中,将您选择的前缀(例如df)绑定到文档中的名称空间URI

xpath.setNamespaceContext( new NamespaceContext() {

public String getNamespaceURI(String prefix) {

switch (prefix) {

case "df": return "http://xml.sap.com/2002/10/metamodel/webdynpro";

...

}

});

然后在路径表达式中使用该前缀来限定元素名称,例如/df:ModelClass/df:ModelClass.Parent/df:Core.Reference[@type

= 'Model']/@package

以上是 Java XPath:使用默认名称空间xmlns的查询 的全部内容, 来源链接: utcz.com/qa/417200.html

回到顶部