xml.sax —SAX2パーサーのサポート
ソースコード: :source: `Lib / xml / sax / __ init __。py`
xml.sax パッケージは、Python用のSimple API for XML(SAX)インターフェイスを実装する多数のモジュールを提供します。 パッケージ自体は、SAXAPIのユーザーが最もよく使用するSAX例外と便利な関数を提供します。
警告
xml.sax モジュールは、悪意を持って構築されたデータに対して安全ではありません。 信頼できないデータまたは認証されていないデータを解析する必要がある場合は、 XMLの脆弱性を参照してください。
バージョン3.7.1で変更: SAXパーサーは、セキュリティを強化するために、デフォルトで一般的な外部エンティティを処理しなくなりました。 以前は、パーサーはネットワーク接続を作成して、DTDおよびエンティティのファイルシステムからリモートファイルをフェッチしたり、ローカルファイルをロードしたりしていました。 この機能は、パーサーオブジェクトのメソッド setFeature()と引数 feature_external_ges を使用して再度有効にできます。
便利な機能は次のとおりです。
- xml.sax.make_parser(parser_list=[])
SAX XMLReader オブジェクトを作成して返します。 最初に見つかったパーサーが使用されます。 parser_list が提供されている場合、
create_parser()
という名前の関数を持つモジュールに名前を付ける文字列の反復可能である必要があります。 parser_list にリストされているモジュールは、パーサーのデフォルトリストのモジュールの前に使用されます。バージョン3.8で変更: parser_list 引数は、リストだけでなく、任意の反復可能にすることができます。
- xml.sax.parse(filename_or_stream, handler, error_handler=handler.ErrorHandler())
- SAXパーサーを作成し、それを使用してドキュメントを解析します。 filename_or_stream として渡されるドキュメントは、ファイル名またはファイルオブジェクトにすることができます。 handler パラメーターはSAX ContentHandler インスタンスである必要があります。 error_handler が指定されている場合、それはSAX ErrorHandler インスタンスである必要があります。 省略した場合、すべてのエラーで SAXParseException が発生します。 戻り値はありません。 すべての作業は、渡されたハンドラーによって実行される必要があります。
- xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())
parse()に似ていますが、パラメーターとして受け取ったバッファー string から解析します。 string は、 str インスタンスまたはバイトのようなオブジェクトである必要があります。
バージョン3.5で変更: str インスタンスのサポートが追加されました。
一般的なSAXアプリケーションは、リーダー、ハンドラー、入力ソースの3種類のオブジェクトを使用します。 この文脈での「リーダー」は、パーサーの別の用語です。 入力ソースからバイトまたは文字を読み取り、一連のイベントを生成するコード。 その後、イベントはハンドラーオブジェクトに配布されます。 リーダーはハンドラーのメソッドを呼び出します。 したがって、SAXアプリケーションは、リーダーオブジェクトを取得し、入力ソースを作成または開き、ハンドラーを作成し、これらのオブジェクトをすべて接続する必要があります。 準備の最後のステップとして、入力を解析するためにリーダーが呼び出されます。 解析中に、ハンドラーオブジェクトのメソッドは、入力データからの構造イベントと構文イベントに基づいて呼び出されます。
これらのオブジェクトには、インターフェースのみが関係します。 通常、アプリケーション自体によってインスタンス化されることはありません。 Pythonにはインターフェイスの明示的な概念がないため、正式にはクラスとして導入されますが、アプリケーションは、提供されたクラスから継承しない実装を使用する場合があります。 InputSource 、 Locator 、Attributes
、AttributesNS
、および XMLReader インターフェースは、モジュール xmlで定義されています。 sax.xmlreader 。 ハンドラーインターフェイスは xml.sax.handler で定義されています。 便宜上、 InputSource (多くの場合直接インスタンス化されます)およびハンドラークラスは xml.sax からも入手できます。 これらのインターフェースについては、以下で説明します。
これらのクラスに加えて、 xml.sax は次の例外クラスを提供します。
- exception xml.sax.SAXException(msg, exception=None)
XMLエラーまたは警告をカプセル化します。 このクラスには、XMLパーサーまたはアプリケーションからの基本的なエラーまたは警告情報を含めることができます。サブクラス化して、追加の機能を提供したり、ローカリゼーションを追加したりできます。 ErrorHandler インターフェースで定義されたハンドラーはこの例外のインスタンスを受け取りますが、実際に例外を発生させる必要はありません。情報のコンテナーとしても役立ちます。
インスタンス化される場合、 msg は人間が読める形式のエラーの説明である必要があります。 オプションの exception パラメーターを指定する場合は、
None
または解析コードによってキャッチされ、情報として渡される例外である必要があります。これは、他のSAX例外クラスの基本クラスです。
- exception xml.sax.SAXParseException(msg, exception, locator)
- 解析エラーで発生した SAXException のサブクラス。 このクラスのインスタンスは、SAX ErrorHandler インターフェースのメソッドに渡され、解析エラーに関する情報を提供します。 このクラスは、SAX Locator インターフェイスと SAXException インターフェイスをサポートします。
- exception xml.sax.SAXNotRecognizedException(msg, exception=None)
- SAXException のサブクラスは、SAX XMLReader が認識されない機能またはプロパティに直面したときに発生します。 SAXアプリケーションおよび拡張機能は、同様の目的でこのクラスを使用できます。
- exception xml.sax.SAXNotSupportedException(msg, exception=None)
- SAXException のサブクラスは、SAX XMLReader がサポートされていない機能を有効にするか、実装がサポートしていない値にプロパティを設定するように求められたときに発生します。 SAXアプリケーションおよび拡張機能は、同様の目的でこのクラスを使用できます。
も参照してください
- SAX:XML用のシンプルなAPI
- このサイトは、SAXAPIの定義の中心です。 Javaの実装とオンラインドキュメントを提供します。 実装と履歴情報へのリンクも利用できます。
- モジュール xml.sax.handler
- アプリケーション提供オブジェクトのインターフェースの定義。
- モジュール xml.sax.saxutils
- SAXアプリケーションで使用するための便利な関数。
- モジュール xml.sax.xmlreader
- パーサーが提供するオブジェクトのインターフェースの定義。
SAXExceptionオブジェクト
SAXException 例外クラスは、次のメソッドをサポートします。
- SAXException.getMessage()
- エラー状態を説明する人間が読めるメッセージを返します。
- SAXException.getException()
- カプセル化された例外オブジェクト、または
None
を返します。