解析REXML文档,忽略空格

时间:2011-03-16 15:49:34

标签: ruby xml-parsing 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解析两者吗?或者我正在寻找一种完全不同的错误?

1 个答案:

答案 0 :(得分:1)

尝试将选项:ignore_whitespace_nodes =&gt;:all传递给Document.new()。