2013-04-01 79 views
2

我需要直接發出一個(潛在大)XML文檔流,所以我想這樣做「SAX風格」 - 以流方式,其中將文件通過網絡發送,因爲我去 - 而不是「DOM風格」 - 以批處理方式,文檔在內存中構建,然後通過網絡發送。我確信這很容易做到,但我無法找到一個適合我生活的好教程。預先感謝您的建議。創建一個XML文檔「SAX樣式」?

編輯要清楚,我不講究,只要它發出的證件,以有線方式,而不是在內存中建立整個文檔它被建成使用的XML API。

+0

檢出http://stackoverflow.com/questions/4898590/generating-xml-using-sax-and-java – Pace

回答

4

我傾向於使用StAX來生成XML而不是SAX - API更易於使用。 XML流式傳輸並不保存在內存中。

例子:

XMLStreamWriter w = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out); 
try 
{ 
    w.writeStartDocument(); 
    w.writeStartElement("root"); 
    for (int i = 0; i < 1000; i++) 
    { 
     w.writeStartElement("number"); 
     w.writeCharacters(String.valueOf(i)); 
     w.writeEndElement(); //number 
    } 
    w.writeEndElement(); //root 
    w.writeEndDocument(); 
} 
finally 
{ 
    w.close(); 
} 
+0

正是我在找什麼。謝謝! – sigpwned

0

你是最好的方法可能取決於您的數據起源。它是否從內存中開始?您是否從外部來源(如服務或數據庫)檢索數據?

如果要轉換大量對象,比如來自數據庫的查詢,那麼執行簡單對象到XML轉換的對象序列化程序(如傑克遜)可能仍然適合您的低內存消耗目標 - - 你只是迭代應用它。打開你的流,讀取一行,序列化,它輸出流,讀取下一行,序列化,等你保持相同的輸出流開全時間,但XML代碼住在內存量始終保持小。