2011-07-11 51 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'參數的文件的絕對路徑。 –

相關問題