REXML應該忽略標識還是空格?解析REXML文檔,忽略空白
我在調試simple HTML to Markdown convertor的問題。出於某種原因,它無法在
<blockquote><p>foo</p></blockquote>
但不是
<blockquote>
<p>foo</p>
</blockquote>
的原因是,在第一種情況下,type.children.first.value
沒有設置,它是後一種情況。 原代碼可以在上面的鏈接中找到,但凝結剪斷,顯示問題如下:
require 'rexml/document'
include REXML
def parse_string(string)
doc = Document.new("<root>\n"+string+"\n</root>")
root = doc.root
root.elements.each do |element|
parse_element(element, :root)
end
end
def parse_element(element, parent)
@output = ''
# ...
@output << opening(element, parent)
#...
end
def opening(type, parent)
case type.name.to_sym
#...
when :blockquote
# remove leading newline
type.children.first.value = ""
"> "
end
end
#Parses just fine
puts parse_string("<blockquote>\n<p>foo</p>\n</blockquote>")
# Fails with undefined method `value=' for <p> ... </>:REXML::Element (NoMethodError)
puts parse_string("<blockquote><p>foo</p></blockquote>")
我敢肯定,這是由於一些參數,使REXML需要whitespacing和identation:爲什麼別人它會解析與後者不同的第一個XML嗎?
我可以強制REXML解析兩者嗎?或者我正在尋找一種完全不同的錯誤?
顯示演示問題的代碼示例。另外,你可能應該使用[Nokogiri](http://nokogiri.org)。這是一個很棒的XML/HTML解析器,正在迅速成爲事實上的選擇。 – 2011-03-16 19:15:22
我已經添加了一個精簡的例子。關於Nokogiri:我也喜歡那個。但是這不是我的腳本,我想簡單地修復它,而不是重寫它來使用不同的XML庫:) – berkes 2011-03-16 19:38:04