REXML应该忽略标识或空格吗?
我正在调试simple HTML to Markdown convertor的问题。由于某些原因,它在
<blockquote><p>foo</p></blockquote>但不是on
<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需要空格和标识:否则为什么它解析第一个XML不同于后者?
我可以强制REXML对两者进行相同的解析吗?或者我看到的是一种完全不同的bug?
发布于 2013-05-28 15:36:41
尝试将选项:ignore_whitespace_nodes=>:all传递给Document.new()。
https://stackoverflow.com/questions/5327872
复制相似问题