有没有办法从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();
所以问题是:
对象xmlDocument
或xpath
能以某种方式返回"C:\ExampleFile.xml"
吗?
答案 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解析器进行解析。