我想使用XML來存儲一些數據。但是當我想要獲取插入的最後一個數據時,我不希望讀取完整文件,也不希望在那裏添加新數據時重寫完整文件。 java中有沒有一種標準的方式來解析XML文件,而不是從開始,但從結束。例如,SAX或StaX解析器將首先遇到最後一個結束根標記並且最後一個標記。或者,如果我想這樣做,我應該閱讀和書寫所有東西,比如我正在閱讀/編寫常規文本文件?從文件末尾解析XML文件
回答
從根本上說,XML是一個糟糕的代表選擇。這種格式本質上就是這樣「包含」的,我還沒有看到任何鼓勵你去反對的API。
選項:
- 選擇不同的格式完全(例如使用一個數據庫)
- 創造了大量的小XML文件,而不是 - 每一個自成一體。當你想要整個數據時,讀取所有文件
- 只需吞下命中並且每次讀/寫整個文件。
您如何看待,創建大量xml文件並將它們全部放入一個zip文件會有效嗎?我能否從zip壓縮包中讀取單獨的文件,而無需解壓縮整個zip文件,但只需要一個我需要的文件? – trims
@trims:是的,那對於閱讀來說是相當高效的(假設一個體面的zip實現) - 但是你不希望每次添加新條目時都要重新壓縮zip文件。 –
爲什麼不使用sax/stax,只處理最後一個條目?是的,它需要打開並瀏覽整個文件,但至少相當有效,而不是加載整個DOM樹。
不這樣做,我不認爲你可以做你要求使用XML作爲來源。
除了Jon Skeet在他的回答中提供的另一種替代將保持相同的格式,但首先插入最新的條目,並在您讀完條目後立即停止處理文件。
我在這方面找到了一個很好的主題,並提供了我想要的示例解決方案。 此鏈接:http://www.oreillynet.com/xml/blog/2007/03/parsing_xml_backwards.html 似乎XML是不是很好的文件格式來實現我想要的。沒有標準的解析器可以從頭到尾解析XML,而不是從頭開始。
可能最好的解決方案是將所有的XML數據存儲在一個文件中,其中包含許多XML文件內容的組成。在每行存儲XML的單獨內容。該文件本身不是格式良好的XML,但每行都包含格式良好的xml,我將使用標準xml解析器(StaX)進行解析。
這樣我就可以從文件的末尾讀取僅僅線條,並將新數據附加到文件末尾。當我需要整個數據或只有部分數據時,我會讀取所有行或其中的一部分。也許我也可以從文件末尾實現分頁,因爲文件可能很大。
爲什麼每行中都有XML?我認爲使用API來解析它很容易,以及將數據存儲在xml中是人類可讀的,而不是用一些符號來分隔行中的值。
- 1. 在解析時到達文件末尾,,
- 2. 從SQLServer解析XML文件
- 3. PHP - 從文本文件末尾讀取
- 4. PDF解析文件尾
- 5. XML文件解析?
- 6. 解析XML文件
- 7. 解析XML文件
- 8. 解析XML文件...
- 9. 解析XML文件
- 10. 解析xml文件
- 11. 解析XML文件
- 12. 解析XML文件
- 13. 解析XML文件
- 14. 解析XML文件:從XML節點集
- 15. XML解析錯誤:文檔末尾的額外內容
- 16. 錯誤的java:63:到達文件末尾,而解析
- 17. 需要解析一個字符串直到文件末尾
- 18. 到達文件末尾,而解析什麼IMISS
- 19. 函數fgetcsv將不會解析文件末尾沒有空行的文件
- 20. mmap超出文件末尾
- 21. 文件末尾要求
- 22. HTML文件末尾的CSS
- 23. 文檔末尾的事件
- 24. 在文件末尾寫入
- 25. Ruby - 從文件末尾連續讀取
- 26. grep從文件末尾搜索
- 27. 使用VIM從文件末尾搜索
- 28. Powershell:從文件末尾向後搜索
- 29. 將XML /文本文件解析爲XML?
- 30. 解析kml文件,如xml文件
難道你只是添加新的數據到文件的前面? XML不是最好的格式,但是結構相當平坦,有些玩偏移你可以達到你想要的。只是想指出你定義了語義,也就是說,如果最新的入口在數據結構中是第一個或最後一個入住 – Matthias
如果我將在文件前面添加新數據,那麼我將重寫整個文件以保存它。讀取操作是好的,但寫入等於創建新的同一個文件。 – trims