Rubyunit testing:这是一个有效(格式良好)的XML Doc吗?
我正在创建一个XML文档:我想至少进行unit testing,以确保它的格式良好。 到目前为止,我只能通过使用REXML库中的’hasElements’来估算它。
有没有更好的办法 ? 最好使用内置库(我的意思是随标准Ruby 1.8.x发行版一起提供的库)。
require "test/unit" require 'rexml/document' require 'test/unit/ui/console/testrunner' include REXML class TestBasic < Test::Unit::TestCase def test_createXML my_xml=...create doc here... doc = Document.new(my_xml); assert(doc.has_elements?); end end Test::Unit::UI::Console::TestRunner.run(TestBasic);
你可以使用Nokogiri 。 它不是标准的Ruby库,但您可以轻松地将其安装为Gem。
begin bad_doc = Nokogiri::XML(badly_formed) { |config| config.options = Nokogiri::XML::ParseOptions::STRICT } rescue Nokogiri::XML::SyntaxError => e puts "caught exception: #{e}" end # => caught exception: Premature end of data in tag root line 1
我使用LibXML来执行xmlvalidation,这里是基本用法:
require 'libxml' # parse DTD dtd = LibXML::XML::Dtd.new(< EOF # parse xml document to be validated instance = LibXML::XML::Document.file('instance.xml') # validate instance.validate(dtd) # => true | false
来自LibXML :: DTD
这是LibXML文档主页的链接。
如果您不想使用自定义validation规则,您仍然可以使用以下内容的公共DTD:
require 'open-uri' dtd = LibXML::XML::Dtd.new(open("http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd").read)
当然你可以做得更好:)
rexml
– 内置库。 您可以使用error handling程序检查xml文件
require 'rexml/document' include REXML errormsg = '' doc = nil begin doc = Document.new(File.new(filename)) rescue errormsg = $! end puts "Fail: #{errormsg}" if('' != errormsg)