Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有XML名称空间的XPath-名称空间上下文为';t地址_Java_Xpath - Fatal编程技术网

Java 带有XML名称空间的XPath-名称空间上下文为';t地址

Java 带有XML名称空间的XPath-名称空间上下文为';t地址,java,xpath,Java,Xpath,我想通过XPath查询XML。此XML已声明命名空间。我已经读到,必须在XPath对象上设置NameContext,并且应该在文档工厂中启用名称空间感知 但是getNamespaceURI(#String)方法中的输出永远不会打印。我做错了什么 String xpathStr = ... //some string DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(t

我想通过XPath查询XML。此XML已声明命名空间。我已经读到,必须在XPath对象上设置NameContext,并且应该在文档工厂中启用名称空间感知

但是getNamespaceURI(#String)方法中的输出永远不会打印。我做错了什么

String xpathStr = ... //some string

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder builder = dbf.newDocumentBuilder();
Document document = builder.parse(settlementFile);

XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath(),
xpath.setNamespaceContext(new NamespaceContext() {

     public String getNamespaceURI(String prefix) {
        System.out.println("I'm here");      
        ... //do some work 
    }

    public String getPrefix(String uri) {
        throw new UnsupportedOperationException();
    }

    public Iterator getPrefixes(String uri) {
        throw new UnsupportedOperationException();
    }
});

XPathExpression xpathExpression = xpath.compile(xpathStr);
String result = xpathExpression.evaluate(document);

请提供最少但完整的代码片段,以便我们重现问题。告诉我们您正在处理名称空间,但不显示XML的任何细节或名称空间中的XPath是毫无意义的。我的XML以
开始,据我所知,当我使用上述构造时,XPath不需要任何名称空间的特殊性。当我删除“xmlns”部分时,评估就起作用了,必须使用绑定到该名称空间的前缀,例如
/rp:Report/rp:Details/rp:Data
,然后
getNamespaceURI
必须返回字符串
http://com/company/report
用于前缀
rp
。当然,您可以选择任何想要的前缀,但是您的XPath代码必须使用前缀,并且您的上下文必须返回该前缀的匹配URI。谢谢您的帮助。我没有真正理解名称空间的概念。