PythonでXMLの検証を行いたい件 

はてなブックマーク - PythonでXMLの検証を行いたい件
Bookmark this on Delicious

自前で出力したsitemap.xmlがgoogleにはじかれたので、XMLスキーマの検証処理をPythonでもやりたいなぁと思って調べてみたら、簡単に出来ました。さすがPythonということでメモ書きです。

lxmlを使うのですが、インストールはコチラを参考に行いました。ありがとうございます。処理手順は非常に簡単で、以下のような感じになります。etree.parseにファイル(ライク)オブジェクトを食わせるのがちょっと注意が必要ですが、それ以外は非常に簡単ですね。要はスキーマオブジェクトを作って、検証したいXMLのDOMを食わせればOKです。

def validate(schema, xml):
  schema_doc = etree.parse(schema)
  xml_doc    = etree.parse(xml)
  xmlschema  = etree.XMLSchema(schema_doc)
  if xmlschema.validate(xml_doc):
    return True
  else:
    raise "E: %s" % (str(xmlschema.error_log.last_error))

検証に失敗した際のエラーはXML Schemaを利用した場合はerror_logを使います。結構しっかりとしたエラーメッセージを出してくれるので、十分バリデータとして使えると思いました。上記メソッドを使って以下のように使います。

  print validate(open('sitemap.xsd', 'r'),   # スキーマと
                 open('sitemap.xml', 'r'))   # 検証対象XMLをファイル(ライク)オブジェクトとして渡す

今回はXMLSchemaを使いましたがDTDやRelaxも同じように扱えます。詳細はlxmlのドキュメントを見て下さいませ。何となくラッパーモジュールが存在してそうな気がしますが、今はこれで十分なので探していません。

これ書いててXML久々に触ったなぁと思いました。数年前はXMLを妄信していて何でもXMLで処理しようとしていましたが、今は完全にJSONに改宗していて、XMLは使いたくないデータ表現に成り下がってしまいました。思い返すとXMLが一番美しい!とか痛い発言を繰り返していたので恥ずかしいです。どうでもいいですね。

関連する記事

タグ: , ,

コメント / トラックバック1件

  1. [...] This post was mentioned on Twitter by taichino. taichino said: Blogged PythonでXMLの検証を行いたい件 http://bit.ly/cwJG8k [...]

コメントをどうぞ