更新在Java社區沒有準備好的XML解析器可以執行NIO和XML解析。這是我發現的最接近,這是不完整的:http://wiki.fasterxml.com/AaltoHomeXMLStreamReader和一個真正的流
我有以下代碼:
InputStream input = ...;
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader streamReader = xmlInputFactory.createXMLStreamReader(input, "UTF-8");
的問題是,爲什麼法#createXMLStreamReader()預計將有一個完整的XML文檔中輸入流?爲什麼它稱爲「流式閱讀器」,如果它似乎無法處理一部分XML數據?例如,如果我喂:
<root>
<child>
它,它會告訴我我錯過了結束標籤。甚至在我開始迭代流讀取器本身之前。我懷疑我只是不知道如何正確使用XMLStreamReader。我應該能夠提供數據的部分,對不對?我需要它,因爲我正在處理從網絡套接字傳入的XML流,並且不想將整個源文本加載到內存中。
謝謝你的幫助, 尤里。
是的,潛在的流必須包含整個文檔。但爲什麼XMLStreamReader會試圖驗證所有這一切?這是一個流。爲什麼不能隨數據一起去解析任何可用的數據?如果*遇到錯誤,我會自己處理。 糾正我,如果我錯了 - 你是說如果我通過網絡讀取1千兆字節大小的XML文檔,我應該全部下載並且只有XMLStreamReader才能夠迭代它呢? – 2010-04-16 15:19:25
我會認爲它不會驗證,直到整個流已被處理(和關閉)。你不應該下載整個事情,那是什麼流。你是否正在寫信給該流,然後關閉它,然後嘗試寫更多? – cjstehno 2010-04-16 15:59:36
Yuri,不,Stax解析器不會完全讀取它;您肯定可以立即開始閱讀,並且解析器只會在沒有任何數據解析的情況下才會被阻止。我不知道問題是什麼,但你的理解是正確的。 – StaxMan 2010-10-02 00:35:41