6

XMLドキュメントを作成しています。少なくともそれが整形式であることを確認するために単体テストを行いたいと思います。これまでのところ、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);
4

3 に答える 3

12

のこぎりが使えます。これは標準の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
于 2010-01-06T12:50:52.017 に答える
3

私はLibXMLを使用してxml検証を実行します。基本的な使用法は次のとおりです。

require 'libxml'

# parse DTD
dtd = LibXML::XML::Dtd.new(<<EOF)
<!ELEMENT root (item*) >
<!ELEMENT item (#PCDATA) >
EOF

# parse xml document to be validated
instance = LibXML::XML::Document.file('instance.xml')

# validate
instance.validate(dtd) # => true | false

LibXML::DTDから

そして、これはLibXMLドキュメントのメインページへのリンクです。

カスタム検証ルールを使用したくない場合でも、次のようなパブリックDTDを使用できます。

require 'open-uri'
dtd =  LibXML::XML::Dtd.new(open("http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd").read)

もちろん、あなたははるかにうまくやることができます:)

于 2010-01-06T12:32:23.760 に答える
0

rexml-組み込みライブラリ。エラーハンドラを使用して、xmlファイルを確認できます

require 'rexml/document'
include REXML

errormsg = ''
doc = nil
begin
  doc = Document.new(File.new(filename))
rescue
  errormsg = $!
end

puts "Fail: #{errormsg}"   if('' != errormsg)
于 2014-12-05T23:13:07.877 に答える