来自xPath-Object的文件路径或Java中的Document-Object

时间:2015-07-16 14:37:13

标签: java xml xpath

有没有办法从xPath-API中的xPath-或Document-Object获取XML-Document的路径?

对象是如何被初始化的:

FileInputStream file = new FileInputStream(new File("C:\ExampleFile.xml"));

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 

DocumentBuilder builder =  builderFactory.newDocumentBuilder();                          

Document xmlDocument = builder.parse(file);

XPath xPath =  XPathFactory.newInstance().newXPath();

所以问题是:

对象xmlDocumentxpath能以某种方式返回"C:\ExampleFile.xml"吗?

2 个答案:

答案 0 :(得分:1)

使用Document对象xmlDocument,您可以使用以下命令返回文件的路径:

xmlDocument.getDocumentURI();

答案 1 :(得分:0)

而不是从FileInputStream创建File并将其传递给parse方法

FileInputStream file = new FileInputStream(new File("C:\\ExampleFile.xml"));

使用直接占用parse的{​​{1}}版本。

File

当您只传递一个流时,解析器无法知道该流是从文件创建的,只要解析器可能是您从Web服务器收到的流,或{{1} },或其他一些非文件来源。如果您将File file = new File("C:\\ExampleFile.xml"); // rest of your code is unchanged - parse(file) is now the // java.io.File version rather than the InputStream version 直接传递给ByteArrayInputStream,那么解析器将处理打开和关闭流本身,并且能够为下游组件提供有意义的URI,并且您将获得一个明智的来自File的结果。

顺便说一句,如果您希望XPath可靠地工作,那么您需要在致电parse之前调用xmlDocument.getDocumentURI()来启用命名空间。即使您的XML实际上没有使用任何名称空间,您仍然需要使用名称空间感知的DOM解析器进行解析。