DOM の操作
Overview
DOM レイヤーは HTML ページを型付きノードのツリーとしてモデル化します。Document はエントリーポイント兼ノードファクトリです。Element と Node は操作と走査 API を担います。
ノードの作成
Document.create_element()、create_text_node()、create_comment()、create_document_fragment() がノードを生成し、append_child() がそれらをアタッチします:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
doc.append_child(el)Attributes
Element.set_attribute()、get_attribute()、has_attribute()、remove_attribute() がマークアップ属性を管理し、Attr と NamedNodeMap がそれらをオブジェクトとして公開します:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)ツリー操作
Node は構造ツールキットを提供します: insert_before()、remove_child()、replace_child()、clone_node()、および contains()、さらに child_nodes、parent_node、first_child アクセサーとサブツリーテキスト用の text_content を含みます。get_root_node() と has_child_nodes() は構造に関する質問に直接答えます。
検索とトラバーサル
Document.get_element_by_id() は ID で要素を取得します。NodeList と HTMLCollection は結果セットを保持します;NodeIterator と TreeWalker(NodeFilter と共に)は文書順でサブツリーを走査します。
変化の観測
MutationObserver はツリーの変更を MutationRecord エントリとして記録し、構造編集に反応する標準的なオブザーバーパターンを鏡のように再現します。
ヒントとベストプラクティス
- すべてのノードは所有する
Documentを通して作成してください — ノードはドキュメント単位でスコープされます。Document.import_node()またはadopt_node()を使用して、ドキュメント間でノードを移動します。 - 手動で
Textノードを操作するよりも、全サブツリーのテキストにはtext_contentを使用することを推奨します。 - 単一の
append_child()の前にノードのバッチを組み立てるには、DocumentFragmentを使用します。 - 属性が意味を持つ場合、
get_attribute()の前にhas_attribute()を確認してください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
| ノードが誤ったドキュメントに表示されます | ノードが別のDocumentによって作成されました | まずimport_node()またはadopt_node()で移動してください |
| 属性の検索で何も返されません | 要素に属性が一度も設定されていません | has_attribute()でガード |
| サブツリーのテキストが空です | 子要素が添付される前に text_content を読み込んでいます | 子要素を添付してから読み込む |
FAQ
どのクラスが新しい要素を作成しますか?
Document — そのcreate_element()メソッドは要素のファクトリであり、テキスト、コメント、フラグメント用の兄弟ファクトリも備えています。
ツリーのサブツリーを2つの文書間で移動するにはどうすればよいですか?
コピーするにはDocument.import_node()を、転送するにはadopt_node()を使用し、次にappend_child()で添付します。
ツリーの変更に対するオブザーバー API はありますか?
はい — MutationObserver は構造および属性の変更を記述した MutationRecord バッチを提供します。
API Reference 概要
| クラス/メソッド | 説明 |
|---|---|
Document.create_element | 要素ノードを作成する |
Document.get_element_by_id | IDで要素を検索する |
Element.set_attribute | マークアップ属性を設定する |
Node.insert_before | 参照子ノードの前にノードを挿入する |
Node.clone_node | ノードまたはサブツリーをコピーする |
MutationObserver | ツリーの変化を監視する |
TreeWalker | フィルタ済み文書順トラバーサル |