2011-07-11 83 views
1

我遇到了Xinclude或实体包含文件的问题。我需要知道,解析器包含哪些文件。示例:Java和XML:如何获取包含文件的列表

<?xml version="1.0" ?> 
<!DOCTYPE docBookChapter [ 
    <!ENTITY externalFile SYSTEM "entityIncluded.xml"> 
]> 
<chapter xmlns="http://www.w3.org/1999/xhtml" 
xmlns:xi="http://www.w3.org/2001/XInclude"> 
    <title>Third chapter</title> 
    <xi:include href="xIncluded.xml"/> 
    <chapter> 
     &externalFile;</chapter> 
</chapter>
解析器成功创建DOM,但如何获取包含的文件名?元素 xi:include已被替换为文件的内容。

+2

你是如何解析XML的?你在使用标准的Java DOM解析吗? – wjans

+0

是的,我喜欢。我创建了一个“DocumentBuilderFactory”实例,然后创建了一个文档构建器实例。文档生成器使用Xerces。 –

回答

1

延伸DefaultHandler@OverwriteresolveEntity方法。您的实现将只是打印或记录publicId/systemId并返回null,因此SAXParser将使用默认行为来解析实体。

将您的DefaultHandler子类与SAXParser构造函数一起传递。

+0

非常感谢。有用。对于所有包含的文件(包含x或包含为实体),该方法获得合并为'systemId'参数的文件的绝对路径。 –

相关问题