我需要將一箇中等大小的XML文件加載到內存中,對該文件進行許多隨機訪問修改(可能成千上萬),然後將結果寫入STDIO。大多數這些修改將是節點插入/刪除,以及文本節點內的字符插入/刪除。這些XML文件將足夠小以適應內存,但足夠大以至於我不想保留多個副本。大量的XML編輯
我想解決的架構/圖書館,我正在尋找建議。
以下是我想出了這麼遠
我尋找這個理想XML庫,到目前爲止,我還沒有發現任何東西,似乎符合該法案。這些庫通常將節點存儲在Haskell列表中,並將文本存儲在Haskell Data.Text對象中。這隻允許線性節點和文本插入,並且我相信文本插入必須在每次插入/刪除時完全重寫。
我認爲序列中存儲節點和文本似乎是要走的路....它支持log(N)插入和刪除,並且只需要在每次更改時重寫一小部分樹。 XML庫都不是基於此,所以我將不得不編寫自己的庫,或者只是使用其他庫中的一個來解析,然後將其轉換爲我自己的形式(鑑於解析XML是多麼容易,我幾乎就和前者一樣,而不是對所有東西進行陰影解析)。
我曾經簡單地考慮過這種可能性,這可能是罕見的情況下Haskell可能不是最好的工具....但後來我意識到可變性在這裏沒有提供很多優勢,因爲我的修改不是' t字符替換,而是添加/刪除。如果我用C語言寫這個,我仍然需要以某種樹形結構存儲字符串/節點,以避免每次插入/刪除時出現大的字節移動。 (實際上,Haskell可能有一些最好的工具來處理這個問題,但如果你覺得有一個更好的選擇,我會接受更好的語言選擇。
要summarize-
哈斯克爾是正確的選擇這個?
Haskell lib是否支持快速節點/文本插入/刪除(log(N))?
是序列最好的數據結構來存儲項目列表(在我的情況下,節點和字符)快速插入和刪除?