[英]REXML::Document.new can we give encode parameters on this line?
[英]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.