2010-03-23 96 views
1

前言:我正在研究用於java的docx解析器。 docx格式基於xml。當我閱讀文檔時,其部分被解組(JAXB)。我得到了一些基於xml標記的元素的樹。在apache.xerces中處理類實例的對象的正確方法是什麼?

幾乎問題:但是一些元素(這是在非常深的XML級)不返回某些類從DOCX規範(即CTStyle,CTDrawing,CTInline等),但作爲對象。這些對象確實是xerces類的實例,例如ElementNSImpl。

問題:我應該如何處理來自xerces的對象(例如ElementNSImpl)?最簡單的方法是:

CTGraphicData gData = getGraphicData(); 
Object obj = gData.getAny().get(0); 
ElementNSImpl element = (ElementNSImpl)obj; 

但它似乎不是一個好的解決方案。我從來沒有直接使用過xerces。有什麼更好的方法來做這個鑄造? (如果有人也給我一個關於正確的方式來遍歷節點的提示,那將是很棒的)。

回答

3

因爲XSD有一個'any',所以JAX-B將這段XML映射到DOM。您應該投射到'元素',而不是'元素NSImpl'。然後,您必須使用DOM API(可能在XPath的協助下)來提取數據。

如果JAXB提供了元素,並且您認爲該模式具有特定類型,而不是xs:any,那麼您配置JAX-B的方式會出現問題。

xs:任何在XSD中的意思是'任何'。

該元素使我們能夠擴展 XML文檔,其中元素不是由模式指定的元素 。

+0

不,一切正常。這是規範中的「任何」。 – Roman 2010-03-23 15:24:48

+0

然後你在DOM業務。 – bmargulies 2010-03-23 15:27:27

+0

感謝您的回答,它至少是一個很好的起點。順便說一句'任何':你認爲我不能'硬編碼'的路徑,必須使用XPath?我想說:「任何」意味着什麼都可以有。 – Roman 2010-03-23 15:28:18

相關問題