xmllib —XMLドキュメントのパーサー
バージョン2.0以降非推奨:代わりに xml.sax を使用してください。 新しいXMLパッケージには、XML1.0の完全なサポートが含まれています。
バージョン1.5.2で変更:名前空間のサポートが追加されました。
このモジュールは、XML(Extensible Markup Language)でフォーマットされたテキストファイルを解析するための基礎として機能するクラス XMLParser を定義します。
- class xmllib.XMLParser
XMLParser クラスは、引数なしでインスタンス化する必要があります。 1
このクラスは、次のインターフェイスメソッドとインスタンス変数を提供します。
- attributes
要素名のマッピングへのマッピング。 後者のマッピングは、要素に有効な属性名を属性のデフォルト値にマップするか、デフォルトがない場合は
None
にマップします。 デフォルト値は空の辞書です。 デフォルトは XMLParser のすべてのインスタンスで共有されるため、この変数はオーバーライドされることを意図しており、拡張されることはありません。
- elements
要素名のタプルへのマッピング。 タプルには、要素の開始タグと終了タグをそれぞれ処理する関数が含まれています。メソッド unknown_starttag()または unknown_endtag()が呼び出される場合は、
None
が含まれます。 。 デフォルト値は空の辞書です。 デフォルトは XMLParser のすべてのインスタンスで共有されるため、この変数はオーバーライドされることを意図しており、拡張されることはありません。
- entitydefs
エンティティ名の値へのマッピング。 デフォルト値には、
'lt'
、'gt'
、'amp'
、'quot'
、および'apos'
の定義が含まれています。
- reset()
インスタンスをリセットします。 未処理のデータをすべて失います。 これは、インスタンス化時に暗黙的に呼び出されます。
- setnomoretags()
タグの処理を停止します。 以降のすべての入力をリテラル入力(CDATA)として扱います。
- setliteral()
リテラルモード(CDATAモード)に入ります。 このモードは、最後に閉じられていないオープンタグに一致するクローズタグが検出されると自動的に終了します。
- feed(data)
パーサーにテキストをフィードします。 完全なタグで構成されている限り、処理されます。 不完全なデータは、さらにデータが供給されるか、 close()が呼び出されるまでバッファリングされます。
- close()
バッファリングされたすべてのデータを、ファイルの終わりマークが後に続くかのように強制的に処理します。 このメソッドは、入力の最後に追加の処理を定義するために派生クラスによって再定義される場合がありますが、再定義されたバージョンは常に close()を呼び出す必要があります。
- translate_references(data)
data 内のすべてのエンティティと文字の参照を翻訳し、翻訳された文字列を返します。
- getnamespace()
現在有効な名前空間URIへの名前空間略語のマッピングを返します。
- handle_xml(encoding, standalone)
このメソッドは、
<?xml ...?>
タグが処理されるときに呼び出されます。 引数は、タグ内のエンコーディング属性とスタンドアロン属性の値です。 エンコーディングとスタンドアロンの両方はオプションです。 handle_xml()に渡される値は、デフォルトでそれぞれNone
と文字列'no'
になります。
- handle_doctype(tag, pubid, syslit, data)
このメソッドは、
<!DOCTYPE...>
宣言が処理されるときに呼び出されます。 引数は、ルート要素のタグ名、正式な公開識別子(または、指定されていない場合はNone
)、システム識別子、および文字列としての内部DTDサブセットの未解釈の内容(または [ X215X]存在しない場合)。
- handle_starttag(tag, method, attributes)
このメソッドは、インスタンス変数 elements で開始タグハンドラーが定義されている開始タグを処理するために呼び出されます。 tag 引数はタグの名前であり、 method 引数は開始タグのセマンティック解釈をサポートするために使用する必要がある関数(メソッド)です。 attributes 引数は属性の辞書であり、キーは name であり、値はタグの
<>
内にある属性の value です。 ]ブラケット。 値の文字とエンティティの参照が解釈されました。 たとえば、開始タグ<A HREF="http://www.cwi.nl/%22>
の場合、このメソッドはhandle_starttag('A', self.elements['A'][0], {'HREF': 'http://www.cwi.nl/'})
として呼び出されます。 基本実装は、属性を唯一の引数としてメソッドを呼び出すだけです。
- handle_endtag(tag, method)
このメソッドは、インスタンス変数 elements で終了タグハンドラーが定義されている終了タグを処理するために呼び出されます。 tag 引数はタグの名前であり、 method 引数は、終了タグのセマンティック解釈をサポートするために使用する必要がある関数(メソッド)です。 たとえば、エンドタグ
</A>
の場合、このメソッドはhandle_endtag('A', self.elements['A'][1])
と呼ばれます。 基本実装は単にメソッドを呼び出します。
- handle_data(data)
このメソッドは、任意のデータを処理するために呼び出されます。 これは、派生クラスによってオーバーライドされることを目的としています。 基本クラスの実装は何もしません。
- handle_charref(ref)
このメソッドは、
&#ref;
形式の文字参照を処理するために呼び出されます。 ref は、10進数、または'x'
が前に付いている場合は16進数のいずれかです。 基本実装では、 ref は0〜255の範囲の数値である必要があります。 文字をASCIIに変換し、引数として文字を使用してメソッド handle_data()を呼び出します。 ref が無効であるか範囲外の場合、メソッドunknown_charref(ref)
が呼び出されてエラーが処理されます。 サブクラスは、ASCII範囲外の文字参照をサポートするために、このメソッドをオーバーライドする必要があります。
- handle_comment(comment)
このメソッドは、コメントが検出されたときに呼び出されます。 comment 引数は、
<!--
と-->
の区切り文字の間のテキストを含む文字列ですが、区切り文字自体は含まれていません。 たとえば、コメント<!--text-->
を指定すると、このメソッドは引数'text'
で呼び出されます。 デフォルトのメソッドは何もしません。
- handle_cdata(data)
このメソッドは、CDATA要素が検出されたときに呼び出されます。 data 引数は、
<![CDATA[
と]]>
の区切り文字の間のテキストを含む文字列ですが、区切り文字自体は含まれていません。 たとえば、エンティティ<![CDATA[text]]>
により、このメソッドは引数'text'
で呼び出されます。 デフォルトのメソッドは何も実行せず、オーバーライドすることを目的としています。
- handle_proc(name, data)
このメソッドは、処理命令(PI)が検出されたときに呼び出されます。 name はPIターゲットであり、 data 引数は、PIターゲットと終了区切り文字の間のテキストを含む文字列ですが、区切り文字自体は含まれません。 たとえば、命令
<?XML text?>
により、このメソッドは引数'XML'
および'text'
で呼び出されます。 デフォルトのメソッドは何もしません。 ドキュメントが<?xml ..?>
で始まる場合、 handle_xml()が呼び出されて処理されることに注意してください。
- handle_special(data)
このメソッドは、宣言が検出されたときに呼び出されます。 data 引数は、
<!
と>
の区切り文字の間のテキストを含む文字列ですが、区切り文字自体は含まれていません。 たとえば、エンティティ宣言<!ENTITY text>
により、このメソッドは引数'ENTITY text'
で呼び出されます。 デフォルトのメソッドは何もしません。<!DOCTYPE ...>
は、ドキュメントの先頭にある場合は個別に処理されることに注意してください。
- syntax_error(message)
このメソッドは、構文エラーが発生したときに呼び出されます。 メッセージは、何が悪かったのかを説明したものです。 デフォルトのメソッドでは、
RuntimeError
例外が発生します。 このメソッドがオーバーライドされた場合、それが戻ることは許容されます。 このメソッドは、エラーを回復できる場合にのみ呼び出されます。 回復不能なエラーは、最初に Syntax_error()を呼び出さずにRuntimeError
を発生させます。
- unknown_starttag(tag, attributes)
このメソッドは、不明な開始タグを処理するために呼び出されます。 これは、派生クラスによってオーバーライドされることを目的としています。 基本クラスの実装は何もしません。
- unknown_endtag(tag)
このメソッドは、不明な終了タグを処理するために呼び出されます。 これは、派生クラスによってオーバーライドされることを目的としています。 基本クラスの実装は何もしません。
- unknown_charref(ref)
このメソッドは、解決できない数字参照を処理するために呼び出されます。 これは、派生クラスによってオーバーライドされることを目的としています。 基本クラスの実装は何もしません。
- unknown_entityref(ref)
このメソッドは、不明なエンティティ参照を処理するために呼び出されます。 これは、派生クラスによってオーバーライドされることを目的としています。 基本クラスの実装は syntax_error()を呼び出してエラーを通知します。
参考
- Extensible Markup Language(XML)1.0
- World Wide Web Consortium(W3C)によって公開されたXML仕様は、XMLの構文とプロセッサの要件を定義しています。 仕様の翻訳を含む、XMLに関する追加資料への参照は、 http://www.w3.org/XML/で入手できます。
- PythonとXML処理
- Python XMLトピックガイドには、PythonからのXMLの使用に関する多くの情報と、XMLに関する他の情報源へのリンクが記載されています。
- PythonでのXML処理のためのSIG
- Python XML Special Interest Groupは、PythonからXMLを処理するための実質的なサポートを開発しています。
XML名前空間
このモジュールは、XML名前空間の推奨事項で定義されているXML名前空間をサポートしています。
XML名前空間で定義されたタグと属性の名前は、タグまたは要素の名前が名前空間(名前空間を定義するURL)の後にスペースとタグまたは属性の名前が続くもので構成されているかのように処理されます。 たとえば、タグ<html xmlns='http://www.w3.org/TR/REC-html40'>
は、タグ名が'http://www.w3.org/TR/REC-html40 html'
であるかのように扱われ、上記の要素内のタグ<html:a href='http://frob.com'>
は、タグ名が'http://www.w3.org/TR/REC-html40 a'
および'http://www.w3.org/TR/REC-html40 href'
であるかのように属性名。
XML名前空間提案の古いドラフトも認識されますが、警告がトリガーされます。
脚注
- 1
- 実際には、パーサーが特定の非標準構造を受け入れるように影響を与えるいくつかのキーワード引数が認識されます。 現在、次のキーワード引数が認識されています。 デフォルトが
1
(true)である最後のものを除いて、これらすべてのデフォルトは0
(false)です。 accept_unquoted_attributes (引用符を必要とせずに特定の属性値を受け入れる)、 accept_missing_endtag_name (</>
のような終了タグを受け入れる)、 map_case (大文字をマップ)タグと属性を小文字にする)、 accept_utf8 (入力でUTF-8文字を許可します。これはXML標準に従って必要ですが、Pythonはまだこれらの文字を適切に処理していないため、そうではありません。デフォルト)、 translate_attribute_references (属性値の文字およびエンティティ参照を変換しようとしないでください)。