我有一個包含像這樣多個鏈接的XML文件的單個文件:如何使用Nokogiri解析包含多個XML文檔的單個文件?
<?xml version ... ?>
<!DOCTYPE ... >
...
<?xml version ... ?>
<!DOCTYPE ... >
...
<?xml version ... ?>
<!DOCTYPE ... >
...
有什麼辦法原樣解析文件,使用引入nokogiri,而不是切片的文件嗎?
我有一個包含像這樣多個鏈接的XML文件的單個文件:如何使用Nokogiri解析包含多個XML文檔的單個文件?
<?xml version ... ?>
<!DOCTYPE ... >
...
<?xml version ... ?>
<!DOCTYPE ... >
...
<?xml version ... ?>
<!DOCTYPE ... >
...
有什麼辦法原樣解析文件,使用引入nokogiri,而不是切片的文件嗎?
你需要把它分成單獨的文件,但這是一件容易的事情。
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開心,但我認爲如果沒有它,就會行。
這不是一個有效的XML文件,所以你不能一次解析它。但是,您可能能夠創建一個從File繼承的類,並且當您到達每個XML文檔的末尾時,您可以輕鬆地返回文件結尾。有了這個,你應該可以打開你的文件一次,但你仍然會對你的XML解析器進行多次調用。
如果XML片段不是很大,那麼最好在一段時間內將一個片段放入一個字符串變量(可能使用regexp),然後解析它。
這就是我一直在做的事情,我害怕周圍沒有乾淨的方式。不幸的是文件本身相當大(> 100MB),我無法控制生成源。 – aosik 2012-03-31 22:29:35
如果文件對於內存來說太大了,那麼對於臨時加載而言,大多數機器上沒有100MB的文件,那麼您可以編寫一些遍歷文件的內容,將其拆分爲其組件文件,然後分別進行處理。 – 2012-04-02 17:41:24