13.5 xml.parsers.expat -- Expat を使った高速な XML 解析

バージョン 2.0 で 新たに追加 された仕様です。

xml.parsers.expat モジュールは、検証 (validation) を 行わない XML パーザ (parser, 解析器)、Expat への Python インタフェースです。 モジュールは一つの拡張型 xmlparser を提供します。これは XMLパーザの現在の状況を表します。一旦 xmlparser オブジェクトを 生成すると、オブジェクトの様々な属性をハンドラ関数 (handler function) に設定できます。 その後、XML 文書をパーザに入力すると、 XML文書の文字列とマークアップ に応じてハンドラ関数が呼び出されます。

このモジュールでは、Expatパーザへのアクセスを提供するために pyexpatモジュールを使用します。 pyexpatモジュールの直接使用は撤廃されています。

このモジュールは、例外を一つと型オブジェクトを一つ提供しています。

exception ExpatError
Expat がエラーを報告したときに例外を送出します。Expatのエラーを 解釈する上での詳細な情報は、 13.5.2 の ``ExpatError Exceptions,'' を参照してください。

exception error
ExpatErrorへの別名です。

XMLParserType
ParserCreate() 関数から返された戻り値の型を示します。

xml.parsers.expat モジュールには以下の 2 つの関数が収められて います:

ErrorString( errno)
与えられたエラー番号 errno を解説する文字列を返します。

ParserCreate( [encoding[, namespace_separator]])
新しい xmlparser オブジェクトを作成し、返します。 encoding が指定されていた場合、XMLデータで使われている 文字列のエンコード名でなければなりません。Expatは、Pythonのように多くの エンコードをサポートしておらず、またエンコーディングのレパートリを 拡張することはできません; サポートするエンコードは、UTF-8, UTF-16, ISO-8859-1 (Latin1), ASCII です。encodingが 指定されると、文書に対する明示的、非明示的なエンコード指定を 上書き (override) します。

Expat はオプションで XML 名前空間の処理を行うことができます。 これは引数 namespace_separator に値を指定することで 有効になります。 この値は、1文字の文字列でなければなりません; 文字列が誤った長さ を持つ場合には ValueError が送出されます (None は 値の省略と見なされます) 名前空間の処理が可能なとき、名前空間に属する 要素と属性が展開されます。要素のハンドラである StartElementHandlerEndElementHandler に渡された 要素名は、名前空間のURI、名前空間の区切り文字、要素名のローカル部を 連結したものになります。名前空間の区切り文字が 0 バイト (chr(0)) の場合、名前空間の URI とローカル部は区切り文字なしで 連結されます。

たとえば、 namespace_separator に空白文字(" ")がセットされ、 次のような文書が解析されるとします。

<?xml version="1.0"?>
<root xmlns    = "http://default-namespace.org/"
      xmlns:py = "http://www.python.org/ns/">
  <py:elem1 />
  <elem2 xmlns="" />
</root>

StartElementHandler は各要素ごとに次のような文字列を受け取ります。

http://default-namespace.org/ root
http://www.python.org/ns/ elem1
elem2

参考:

The Expat XML Parser
Expatプロジェクトのホームページ



ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。