目次

前のトピックへ

20.11. xml.sax.saxutils — SAX ユーティリティ

次のトピックへ

20.13. xml.etree.ElementTree — ElementTree XML API

このページ

20.12. xml.sax.xmlreader — XML パーサのインタフェース

バージョン 2.0 で追加.

各 SAX パーサは Python モジュールとして XMLReader インタフェースを実装しており、関数 create_parser() を提供しています。この関数は新たなパーサ・オブジェクトを生成する際、 xml.sax.make_parser() から引き数なしで呼び出されます。

class xml.sax.xmlreader.XMLReader

SAX パーサが継承可能な基底クラスです。

class xml.sax.xmlreader.IncrementalParser

入力ソースをパースする際、すべてを一気に処理しないで、途中でドキュメントのチャンクを取得したいことがあります。SAX リーダは通常、ファイル全体を一気に読み込まずチャンク単位で処理するのですが、全体の処理が終わるまで parse() は return しません。つまり、IncrementalParser インタフェースは parse() にこのような排他的挙動を望まないときに使われます。

パーサのインスタンスが作成されると、feed メソッドを通じてすぐに、データを受け入れられるようになります。close メソッドの呼出しでパースが終わると、パーサは新しいデータを受け入れられるように、reset メソッドを呼び出されなければなりません。

これらのメソッドをパース処理の途中で呼び出すことはできません。つまり、パースが実行された後で、パーサから return する前に呼び出す必要があるのです。

なお、SAX 2.0 ドライバを書く人のために、XMLReader インタフェースの parse メソッドがデフォルトで、IncrementalParser の feed、close、reset メソッドを使って実装されています。

class xml.sax.xmlreader.Locator

SAX イベントとドキュメントの位置を関連付けるインタフェースです。locator オブジェクトは DocumentHandler メソッドを呼び出している間だけ正しい情報を返し、それ以外とのときに呼び出すと、予測できない結果が返ります。情報を取得できない場合、メソッドは None を返すこともあります。

class xml.sax.xmlreader.InputSource([systemId])

XMLReader がエンティティを読み込むために必要な情報をカプセル化します。

このクラスには公開識別子、システム識別子、(場合によっては文字エンコーディング情報を含む)バイト・ストリーム、そしてエンティティの文字ストリームなどの情報が含まれます。

アプリケーションは XMLReader.parse() メソッドに渡す引き数、または EntityResolver.resolveEntity の戻り値としてこのオブジェトを作成します。

InputSource はアプリケーション側に属します。 XMLReader はアプリケーションから渡された InputSource オブジェクトの変更を許していませんが、コピーを作り、それを変更することは可能です。

class xml.sax.xmlreader.AttributesImpl(attrs)

Attributes インタフェース ( The Attributes インタフェース 参照)の実装です。辞書風のオブジェクトで、 startElement() 内で要素の属性表示をおこないます。多くの辞書風オブジェクト操作に加え、ほかにもインタフェースに記述されているメソッドを、多数サポートしています。このクラスのオブジェクトはリーダによってインスタンスを作成しなければなりません。また、 attrs は属性名と属性値を含む辞書風オブジェクトでなければなりません。

class xml.sax.xmlreader.AttributesNSImpl(attrs, qnames)

AttributesImpl を名前空間認識型に改良したクラスで、 startElementNS() に渡されます。 AttributesImpl の派生クラスですが、 namespaceURIlocalname 、この2つのタプルを解釈します。さらに、元のドキュメントに出てくる修飾名を返す多くのメソッドを提供します。このクラスは AttributesNS インタフェース (AttributesNS インタフェース 参照) の実装です。

20.12.1. XMLReader オブジェクト

XMLReader は次のメソッドをサポートします。:

XMLReader.parse(source)

入力ソースを処理し、SAX イベントを発生させます。 source オブジェクトにはシステム識別子(入力ソースを特定する文字列 – 一般にファイル名やURL)、ファイル風オブジェクト、または InputSource オブジェクトを指定できます。 parse() から return された段階で、入力データの処理は完了、パーサ・オブジェクトは破棄ないしリセットされます。 なお、現在の実装はバイト・ストリームのみをサポートしており、文字ストリームの処理は将来の課題になっています。

XMLReader.getContentHandler()

現在の ContentHandler を返します。

XMLReader.setContentHandler(handler)

現在の ContentHandler をセットします。 ContentHandler がセットされていない場合、コンテント・イベントは破棄されます。

XMLReader.getDTDHandler()

現在の DTDHandler を返します。

XMLReader.setDTDHandler(handler)

現在の DTDHandler をセットします。 DTDHandler がセットされていない場合、DTD イベントは破棄されます。

XMLReader.getEntityResolver()

現在の EntityResolver を返します。

XMLReader.setEntityResolver(handler)

現在の EntityResolver をセットします。 EntityResolver がセットされていない場合、外部エンティティとして解決されるべきものが、システム識別子として解釈されてしまうため、該当するものがなければ結果 的にエラーとなります。

XMLReader.getErrorHandler()

現在の ErrorHandler を返します。

XMLReader.setErrorHandler(handler)

現在のエラー・ハンドラをセットします。 ErrorHandler がセットされていない場合、エラーは例外を発生し、警告が表示されます。

XMLReader.setLocale(locale)

アプリケーションにエラーや警告のロカール設定を許可します。

SAX パーサにとって、エラーや警告の地域化は必須ではありません。しかし、パーサは要求されたロカールをサポートしていない場合、SAX 例外を発生させなければなりません。アプリケーションはパースの途中でロカールを変更することもできます。

XMLReader.getFeature(featurename)

機能 featurename の現在の設定を返します。その機能が認識できないときは、 SAXNotRecognizedException を発生させます。広く使われている機能名の一覧はモジュール xml.sax.handler に書かれています。

XMLReader.setFeature(featurename, value)

機能名 featurename に値 value をセットします。その機能が認識できないときは、 SAXNotRecognizedException を発生させます。また、パーサが指定された機能や設定をサポートしていないときは、 SAXNotSupportedException を発生させます。

XMLReader.getProperty(propertyname)

属性名 propertyname の現在の値を返します。その属性が認識できないときは、 SAXNotRecognizedException を発生させます。 広く使われている属性名の一覧はモジュール xml.sax.handler に書かれています。

XMLReader.setProperty(propertyname, value)

属性名 propertyname に値 value をセットします。その機能が認識できないときは、 SAXNotRecognizedException を発生させます。また、パーサが指定された機能や設定をサポートしていないときは、 SAXNotSupportedException を発生させます。

20.12.2. IncrementalParser オブジェクト

IncrementalParser のインスタンスは次の追加メソッドを提供します。:

IncrementalParser.feed(data)

data のチャンクを処理します。

IncrementalParser.close()

ドキュメントの終わりを決定します。終わりに達した時点でドキュメントが整形式であるかどうかを判別、ハンドラを起動後、パース時に使用した資源を解放します。

IncrementalParser.reset()

このメソッドは close が呼び出された後、次のドキュメントをパース可能にするため、パーサのリセットするのに呼び出されます。close 後、reset を呼び出さずに parse や feed を呼び出した場合の戻り値は未定義です。

20.12.3. Locator オブジェクト

Locator のインスタンスは次のメソッドを提供します。:

Locator.getColumnNumber()

現在のイベントが終了する列番号を返します。

Locator.getLineNumber()

現在のイベントが終了する行番号を返します。

Locator.getPublicId()

現在の文書イベントの公開識別子を返します。

Locator.getSystemId()

現在のイベントのシステム識別子を返します。

20.12.4. InputSource オブジェクト

InputSource.setPublicId(id)

この InputSource の公開識別子をセットします。

InputSource.getPublicId()

この InputSource の公開識別子を返します。

InputSource.setSystemId(id)

この InputSource のシステム識別子をセットします。

InputSource.getSystemId()

この InputSource のシステム識別子を返します。

InputSource.setEncoding(encoding)

この InputSource の文字エンコーディングをセットします。

指定するエンコーディングは XML エンコーディング宣言として定義された文字列でなければなりません(セクション 4.3.3 の XML 勧告を参照)。

InputSource のエンコーディング属性は、 InputSource がたとえ文字ストリームを含んでいたとしても、無視されます。

InputSource.getEncoding()

この InputSource の文字エンコーディングを取得します。

InputSource.setByteStream(bytefile)

この入力ソースのバイトストリーム(Python のファイル風オブジェクトですが、バイト列と文字の相互変換はサポートしません)を設定します。

なお、文字ストリームが指定されてもSAX パーサは無視し、バイト・ストリームを使って指定された URI に接続しようとします。

アプリケーション側でバイト・ストリームの文字エンコーディングを知っている場合は、setEncoding メソッドを使って指定する必要があります。

InputSource.getByteStream()

この入力ソースのバイトストリームを取得します。

getEncoding メソッドは、このバイト・ストリームの文字エンコーディングを返します。認識できないときは None を返します。

InputSource.setCharacterStream(charfile)

この入力ソースの文字ストリームをセットします(ストリームは Python 1.6 の Unicode-wrapped なファイル風オブジェクトで、ユニコード文字列への変換をサポートしていなければなりません)。

なお、文字ストリームが指定されても SAX パーサは無視、システム識別子とみなし、バイト・ストリームを使って URI に接続しようとします。

InputSource.getCharacterStream()

この入力ソースの文字ストリームを取得します。

20.12.5. The Attributes インタフェース

Attributes オブジェクトは copy(), get(), has_key(), items(), keys(), values() などを含む、マッピング・プロトコルの一部を実装したものです。さらに次のメソッドも提供されています。:

Attributes.getLength()

属性の数を返す。

Attributes.getNames()

属性の名前を返す。

Attributes.getType(name)

属性名 name のタイプを返す。通常は 'CDATA'

Attributes.getValue(name)

属性 name の値を返す。

20.12.6. AttributesNS インタフェース

このインタフェースは Attributes インタフェース (The Attributes インタフェース 参照) のサブタイプです。 Attributes インタフェースがサポートしているすべてのメソッドは AttributesNS オブジェクトでも利用可能です。

そのほか、次のメソッドがサポートされています。:

AttributesNS.getValueByQName(name)

修飾名の値を返す。

AttributesNS.getNameByQName(name)

修飾名 name に対応する (namespace, localname) のペアを返す。

AttributesNS.getQNameByName(name)

(namespace, localname) のペアに対応する修飾名を返す。

AttributesNS.getQNames()

すべての属性の修飾名を返す。