繁体   English   中英

REXML :: Document.new将简单的字符串作为好文档?

[英]REXML::Document.new take a simple string as good doc?

我想检查xml是否有效。 所以,这是我的代码

require 'rexml/document'
begin

  def valid_xml?(xml)
    REXML::Document.new(xml)
  rescue REXML::ParseException
    return nil
  end

  bad_xml_2=%{aasdasdasd}
  if(valid_xml?(bad_xml_2) == nil)
    puts("bad xml")
    raise "bad xml"
  end
  puts("good_xml")
rescue Exception => e
  puts("exception" + e.message)
end

并返回good_xml作为结果。 我做错什么了吗? 如果字符串为,它将返回bad_xml。

bad_xml = %{
     <tasks>
      <pending>

      <entry>Grocery Shopping</entry>
      <done>
      <entry>Dry Cleaning</entry>
     </tasks>}

就个人而言,我建议使用Nokogiri ,因为它是Ruby中XML / HTML解析的事实上的标准。 使用它来解析格式错误的文档:

require 'nokogiri'

doc = Nokogiri::XML('<xml><foo><bar></xml>')
doc.errors # => [#<Nokogiri::XML::SyntaxError: Opening and ending tag mismatch: bar line 1 and xml>, #<Nokogiri::XML::SyntaxError: Premature end of data in tag foo line 1>, #<Nokogiri::XML::SyntaxError: Premature end of data in tag xml line 1>]

如果我分析格式正确的文档:

doc = Nokogiri::XML('<xml><foo/><bar/></xml>')
doc.errors # => []

REXML将简单的字符串视为没有根节点的有效XML:

xml = REXML::Document.new('aasdasdasd')
# => <UNDEFINED> ... </>

但是,它不会将非法XML(例如,带有不匹配标签的XML)视为有效XML,并引发异常。

REXML::Document.new(bad_xml)
# REXML::ParseException: #<REXML::ParseException: Missing end tag for 'done' (got "tasks")

它缺少<done>的结束标签-因此无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM