2012-01-19 58 views
0

我正在使用xml編寫器進行格式轉換。由於流式傳輸功能(輸入文件非常大,需要逐段寫入),我決定使用StAX API(遊標API)。我正在使用數據格式(某些類)來存儲輸入文件中的分析值。我還創建了一些用於編寫具有writeNode方法的xml文件的類。此方法如下所示:在Java中使用Stax時出現空xml節點的問題

public void writeNode(Object object){ 
writer.writeStartElement(); 
... some writeNode calls of the children nodes 
writer.writeEndElement(); 

} 

名稱爲「writer」的對象是StAXStreamWriter類的實例。 我的問題是,有時這些孩子節點是空的。在這些情況下,父節點根本不應寫入。現在我正在生成空節點,因爲當前節點的開始標記已被寫入。據我所知這不能逆轉。 任何想法來解決這個問題?

問候

拉爾斯

更新:

我想,我找到了解決辦法。我將編寫自己的類,它實現了XMLStreamWriter接口。在這個類中,我將使用隊列或列表數據結構來存儲開始標記,直到寫入第一個屬性或節點值。

更新2:

下面是我的解決方案的更精確的描述。我使用了裝飾器設計模式來圍繞標準Streamwriter類包裝我的新類。這個類有一個ArrayList,其中存儲Start標籤直到調用writeCharacter方法。

回答

1

通過XML文件時,您可以通過xmlStreamReader.getEventType()獲取當前事件。當您遇到XMLStreamConstants.START_ELEMENT時,您可以保留開始的標籤名稱,例如保存插入順序的集合(如LinkedHashSet)。

當你遇到再XMLStreamConstants.CHARACTERS,做一個.getText(),寫以前存儲的標籤爲xmlStreamWriter,但前提是該文本不是空的(也許你也想.trim().getText() -Result)。

Regards, Max

相關問題