我想在这个文件(如图节选)做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/webdynpro
当d
遇到)。 在这种情况下, getNamespaceURI
被调用,但XPath表达式求值的结果始终是一个空字符串。
如果我从文件,并从XPath查询表达式去掉命名空间,我能得到我想要的字符串(com.test.mypackage)。
有没有办法让事情默认命名空间正常工作?