pepe_la_phew's diary

LL系の話など

Nokogiri+CucumberにてXMLの妥当性確認

XMLに対応したXSDを用意し、それをNokogiriで読んでvalidateする。
その結果をCucumberで受ける。
…というだけのものです。

■features/validate_xml.feature

機能: XSDによりXMLの妥当性を確認する

シナリオ: XMLスキーマを読んで妥当性を確認

    前提: XMLドキュメント "sample1.xml" を読む
    かつ: スキーマ "sample1.xsd" を読む
    もし: ドキュメントがスキーマに準拠している
    ならば: ドキュメントは妥当性確認された

■features/step_definitions/xml_validation.rb

前提 /^: XMLドキュメント "(.*?)" を読む$/ do |fname|
  @doc = Nokogiri::XML(File.read(fname))
end

前提 /^: スキーマ "(.*?)" を読む$/ do |fname|
  @xsd = Nokogiri::XML::Schema(File.read(fname))
end

もし /^: ドキュメントがスキーマに準拠している$/ do
  @valid = true
  @xsd.validate(@doc).each do |error|
    @valid = false
    puts "XML not schema valid ([#{error.line}-#{error.column}] #{error.message})"
  end
end

ならば /^: ドキュメントは妥当性確認された$/ do
  @valid.should be_true
end

■features/support/env.rb

require 'nokogiri'