xml.dom.pulldom —部分的なDOMツリーの構築のサポート—Pythonドキュメント
xml.dom.pulldom —部分的なDOMツリーの構築のサポート
ソースコード: :source: `Lib / xml / dom / pulldom.py`
xml.dom.pulldom モジュールは、必要に応じてドキュメントのDOMアクセス可能なフラグメントを生成するように要求できる「プルパーサー」を提供します。 基本的な概念には、着信XMLのストリームから「イベント」を取得して処理することが含まれます。 コールバックとともにイベント駆動型処理モデルも採用しているSAXとは対照的に、プルパーサーのユーザーは、ストリームからイベントを明示的にプルし、処理が終了するかエラー状態が発生するまでそれらのイベントをループします。
警告
xml.dom.pulldom モジュールは、悪意を持って構築されたデータに対して安全ではありません。 信頼できないデータまたは認証されていないデータを解析する必要がある場合は、 XMLの脆弱性を参照してください。
バージョン3.7.1で変更: SAXパーサーは、デフォルトでセキュリティを強化するために、デフォルトで一般的な外部エンティティを処理しなくなりました。 外部エンティティの処理を有効にするには、カスタムパーサーインスタンスを次の場所に渡します。
from xml.dom.pulldom import parse
from xml.sax import make_parser
from xml.sax.handler import feature_external_ges
parser = make_parser()
parser.setFeature(feature_external_ges, True)
parse(filename, parser=parser)
例:
from xml.dom import pulldom
doc = pulldom.parse('sales_items.xml')
for event, node in doc:
if event == pulldom.START_ELEMENT and node.tagName == 'item':
if int(node.getAttribute('price')) > 50:
doc.expandNode(node)
print(node.toxml())
event
は定数であり、次のいずれかになります。
START_ELEMENT
END_ELEMENT
COMMENT
START_DOCUMENT
END_DOCUMENT
CHARACTERS
PROCESSING_INSTRUCTION
IGNORABLE_WHITESPACE
node
は、タイプxml.dom.minidom.Document
、xml.dom.minidom.Element
、またはxml.dom.minidom.Text
のオブジェクトです。
ドキュメントはイベントの「フラット」ストリームとして扱われるため、ドキュメントの「ツリー」は暗黙的にトラバースされ、ツリー内の深さに関係なく、目的の要素が見つかります。 言い換えると、ドキュメントノードの再帰的検索などの階層的な問題を考慮する必要はありませんが、要素のコンテキストが重要である場合は、コンテキスト関連の状態を維持する必要があります(つまり、 任意の時点でドキュメント内のどこにあるかを覚えておく)、または DOMEventStream.expandNode()メソッドを使用して、DOM関連の処理に切り替えます。
- class xml.dom.pulldom.PullDom(documentFactory=None)
- xml.sax.handler.ContentHandler のサブクラス。
- class xml.dom.pulldom.SAX2DOM(documentFactory=None)
- xml.sax.handler.ContentHandler のサブクラス。
- xml.dom.pulldom.parse(stream_or_string, parser=None, bufsize=None)
- 指定された入力から DOMEventStream を返します。 stream_or_string は、ファイル名またはファイルのようなオブジェクトのいずれかです。 parser は、指定されている場合、 XMLReader オブジェクトである必要があります。 この関数は、パーサーのドキュメントハンドラーを変更し、名前空間のサポートをアクティブにします。 他のパーサー構成(エンティティリゾルバーの設定など)は、事前に行っておく必要があります。
文字列にXMLがある場合は、代わりに parseString()関数を使用できます。
- xml.dom.pulldom.parseString(string, parser=None)
- (Unicode) string を表す DOMEventStream を返します。
- xml.dom.pulldom.default_bufsize
bufsize パラメーターのデフォルト値は parse()です。
この変数の値は、 parse()を呼び出す前に変更でき、新しい値が有効になります。
DOMEventStreamオブジェクト
- class xml.dom.pulldom.DOMEventStream(stream, parser, bufsize)
バージョン3.8以降非推奨:
sequence protocol
のサポートは非推奨になりました。- getEvent()
event と現在の node を含むタプルを
xml.dom.minidom.Document
として返します(イベントがSTART_DOCUMENT
に等しい場合)、xml.dom.minidom.Element
(イベントがSTART_ELEMENT
またはEND_ELEMENT
またはxml.dom.minidom.Text
。 expandNode()が呼び出されない限り、現在のノードにはその子に関する情報は含まれません。
- expandNode(node)
node のすべての子を node に展開します。 例:
from xml.dom import pulldom xml = '<html><title>Foo</title> <p>Some text <div>and more</div></p> </html>' doc = pulldom.parseString(xml) for event, node in doc: if event == pulldom.START_ELEMENT and node.tagName == 'p': # Following statement only prints '<p/>' print(node.toxml()) doc.expandNode(node) # Following statement prints node with all its children '<p>Some text <div>and more</div></p>' print(node.toxml())
- reset()