REXML이 식별 또는 공백 문자를 무시해야합니까?공백을 무시하고 REXML 문서를 구문 분석하십시오.
simple HTML to Markdown convertor으로 문제를 디버깅하고 있습니다. 어떤 이유로 그 첫 번째 경우에, type.children.first.value
은 그것이 후자의 경우, 설정되지 않은,
<blockquote><p>foo</p></blockquote>
하지만
<blockquote>
<p>foo</p>
</blockquote>
이유는에
에 실패합니다. 원래의 코드는 위의 링크에서 찾을 수 있습니다,하지만이 문제를 보여 냈다 응축 아래입니다 :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 파서 인데요, 빠르게 변화하는 선택이되고 있습니다. –
나는 압축 된 예제를 추가했습니다. 그리고 Nokogiri에 대해서 : 나는 그것도 더 좋아합니다. 하지만이 스크립트는 저의 것이 아니며 다른 XML 라이브러리를 사용하도록 다시 작성하는 대신 간단하게 수정하려고합니다 : – berkes