動かざることバグの如し

近づきたいよ 君の理想に

Rubyで特定の文字列が有効なXMLかどうかを確認する

環境

  • Ruby3

コード

Rubyを使用して特定の文字列が有効なXMLかどうかを確認するメソッドは以下

require 'nokogiri'

def valid_xml?(string)
  doc = Nokogiri::XML(string)
  doc.errors.empty?
end

もしXMLの構造に問題があれば、errorsメソッドはNokogiri::XML::SyntaxErrorの配列を返します。

また、Nokogiri::XML.parseメソッドを使っても同様のことができます。

このメソッドは、第一引数に文字列またはIOオブジェクトを受け取り、第三引数に文字コードを指定できます。例えば、以下のように書くことができます。

require 'nokogiri'

def valid_xml?(string)
  doc = Nokogiri::XML.parse(string, nil, "UTF-8")
  doc.errors.empty? # エラーがなければtrueを返す
end

このメソッドは、文字列がvalidなXMLであるかどうか(つまり、DTDスキーマに従っているかどうか)は判定しません。

もしvalidityをチェックしたい場合は、Nokogiri::XML::SchemaやNokogiri::XML::RelaxNGなどのクラスを使ってください²。

参考リンク