我對Ruby非常陌生,嘗試使用REXML解析XML文檔,該文檔之前已經很漂亮(通過REXML)打印,但結果稍微不穩定。爲什麼REXML不能解析CDATA前面有換行符?
某些CDATA節在打開XML標記後但在打開CDATA塊之前有換行符,在這些情況下,REXML會將標記的文本解析爲空。
- 任何想法,如果我可以得到REXML閱讀這些行?
- 如果沒有,我可以用正則表達式或其他東西重寫它們嗎?
- 這是否甚至是有效的XML?
下面是一個示例XML文檔(多刪節):
<?xml version="1.0" encoding="utf-8"?>
<root-tag>
<content type="base64"><![CDATA[V2VsbCBkb25lISBJdCB3b3JrcyA6KQ==]]></content>
<content type="base64">
<![CDATA[VGhpcyB3b250IHdvcms=]]></content>
<content><![CDATA[This will work]]></content>
<content>
<![CDATA[This will not appear]]></content>
<content>
Seems happy</content>
<content>Obviously no problem</content>
</root-tag>
,這裏是我的Ruby腳本(蒸餾至最小的例子):
require 'rexml/document'
require 'base64'
include REXML
module RexmlSpike
file = File.new("ex.xml")
doc = Document.new file
doc.elements.each("root-tag/content") do |contentElement|
if contentElement.attributes["type"] == "base64"
puts "decoded: " << Base64.decode64(contentElement.text)
else
puts "raw: " << contentElement.text
end
end
puts "Finished."
end
我得到的輸出是:
>> ruby spike.rb
decoded: Well done! It works :)
decoded:
raw: This will work
raw:
raw:
Seems happy
raw: Obviously no problem
Finished.
我在OSX Lion上使用Ruby 1.9.3p392。練習的目的是最終將一些BlogML的註釋解析爲Disqus使用的自定義導入XML。
謝謝 - 我想我可能會嘗試Nokogiri,它聽起來好像更好,但它並沒有真正回答原來的問題,所以我會留下來看看是否有人知道答案。 –
這並沒有回答這個問題,也沒有正確解釋爲什麼他應該使用nokogiri而不是REXML – fotanus
他應該使用Nokogiri,如果他想解析XML而沒有他使用REXML遇到的麻煩。建議OP使用JSON而不是XML使它們比Nokogiri和REXML更遠。 –