我正在使用Woodstox在我的應用程序中傳輸XML文檔。我需要在模式定義的元素上設置默認屬性,然後才能處理這些元素,但使用Woodstox執行此操作的唯一方法是使用額外的XMLStreamReader將文檔讀入內存,並使用一些邏輯來編寫默認屬性,將其寫出到內存中的XML文檔,然後將內存中的文檔傳遞到業務邏輯中。Java:在XMLStreamReader2上設置屬性?
我不喜歡這樣。我想爲每個元素傳遞文檔以保持內存佔用低,因爲文檔可能很大,並且我正在應用程序中運行這個文檔的多個實例。在流式處理文檔時,是否有方法將屬性注入到XMLStreamReader中?我已經找到了一種方法來跳過節點,我不感興趣,而流:
public class XMLPreProcessor extends StreamReader2Delegate {
public XMLPreProcessor(XMLStreamReader2 sr) {
super(sr);
}
//Skip over all processing instructions
//Can this be extended to inject attributes to elements?
@Override
public int next() throws XMLStreamException {
int eventType = super.next();
while(eventType == XMLStreamConstants.PROCESSING_INSTRUCTION) {
eventType = super.next();
}
return eventType;
}
}
可以此委託進行調整注入屬性爲XMLStreamReader的?
我最終用XMLEventReader封裝了委託,並覆蓋了'nextEvent()'方法在元素上注入默認屬性。在XMLStreamReader上覆蓋的方法太多了,再加上它是特定於實現的,所以對於特殊功能來說這是太多的工作。重寫XMLEventReader更簡單,如果更改實現,重寫會更容易。 – user1428945