2012-03-30 48 views

回答

3

你需要把它分成單獨的文件,但這是一件容易的事情。

Ruby的String.split方法很容易。例如,如果變量foo包含文本,然後將foo.split("<?xml version ... ?>\n")返回一個數組,你可以遍歷:每塊者的

foo.split("<?xml version ... ?>\n") 
[ 
    [0] "", 
    [1] "<!DOCTYPE ... >\n...\n", 
    [2] "<!DOCTYPE ... >\n...\n", 
    [3] "<!DOCTYPE ... >\n..." 
] 

解析,你會用自己的方式。您可能需要預先支持XML DECL語句以使Nokogiri開心,但我認爲如果沒有它,就會行。

+0

這就是我一直在做的事情,我害怕周圍沒有乾淨的方式。不幸的是文件本身相當大(> 100MB),我無法控制生成源。 – aosik 2012-03-31 22:29:35

+0

如果文件對於內存來說太大了,那麼對於臨時加載而言,大多數機器上沒有100MB的文件,那麼您可以編寫一些遍歷文件的內容,將其拆分爲其組件文件,然後分別進行處理。 – 2012-04-02 17:41:24

0

這不是一個有效的XML文件,所以你不能一次解析它。但是,您可能能夠創建一個從File繼承的類,並且當您到達每個XML文檔的末尾時,您可以輕鬆地返回文件結尾。有了這個,你應該可以打開你的文件一次,但你仍然會對你的XML解析器進行多次調用。

如果XML片段不是很大,那麼最好在一段時間內將一個片段放入一個字符串變量(可能使用regexp),然後解析它。