警告 |
|
domxml拡張モジュールは、DOM標準に対する互換性を改善するためPHPバー
ジョン4.3.0で書き直されました。拡張モジュールには、まだ、多くの古
い関数が含まれていますが、使用は推奨されません。特にオブジェクト
指向でない関数の使用は避けるべきです。
拡張モジュールによりDOM APIでXMLドキュメントを処理することが可能
となります。また、完全なXMLドキュメントをPHPオブジェクトツリーに 変換する関数
domxml_xmltree()
も提供されています。 現在、このツリーは読み込み可とされています。このツリーを修正する ことは可能ですが、
DomDocument_dump_mem()
にこれ を適用することはできないため、意味はありません。
そこで、XMLファイルを読み込み、修正した版を書き込みたい場合、
DomDocument_create_element()
,
DomDocument_create_text()
,
set_attribute()
等を使用し、最後に
DomDocument_dump_mem()
関数を使用して下さい。
この拡張モジュールは、
GNOME
XMLライブラ リ
を使用します。このライブラリをダウンロードし、インストー ルして下さい。少なくとも libxml-2.4.14
が必要です。 DOM XSLT機能を使用するために
libxslt library
と
http://www.exslt.org/
によ るEXSLT拡張を使用することができます。
(拡張)XSLT機能を使用するには、これらのライブラリをダウンロード、
インストールして下さい。少なくともlibxslt-1.0.18が必要です。
この拡張モジュールは、
--with-dom=[DIR]
を指定してPHPを設 定した場合のみ利用可能です。DOM XSLTサポートを組み込むには、
--with-dom-xslt[=DIR]
を追加して下 さい。DIRは、libxsltをインストールしたディレクトリです。DOM EXSLTサ
ポートを有効にするには、
--with-dom-exslt[=DIR]
を指定しま す。ただし、DIRはlibxsltをインストールしたディレクトリです。
Win32ユーザへの注意 このモジュールをWindows環境で有効にするには、 libxml2.dll をPHP/Win32バイナリパッケージのDLL フォルダから使用するWindowsマシンのSYSTEM32フォルダ(例: C:\WINNT\SYSTEM32またはC:\WINDOWS\SYSTEM32)にコピーする必要がありま す。
DOM標準に沿っておらず、もう使うべきではない関数がごく少数あります。
これらの関数を以下の表に示します。 関数
DomNode_append_child()
はその動作が変更さ れました。この関数は、子を追加しますが、兄弟は追加しません。
これにより、アプリケーションの動作に影響が生じる場合、DOMではない 関数
DomNode_append_sibling()
を使用して下さい。
表 1古い関数とその代替関数
古い関数 | 新しい関数 |
---|---|
xmldoc | domxml_open_mem() |
xmldocfiel | domxml_open_file() |
domxml_new_xmldoc | domxml_new_doc() |
domxml_dump_mem | DomDocument_dump_mem() |
domxml_dump_mem_file | DomDocument_dump_file() |
DomDocument_dump_mem_file | DomDocument_dump_file() |
DomDocument_add_root | DomDocument_create_element() の後に DomNode_append_child() |
DomDocument_dtd | DomDocument_doctype() |
DomDocument_root | DomDocument_document_element() |
DomDocument_children | DomNode_child_nodes() |
DomDocument_imported_node | No replacement. |
DomNode_add_child | Create a new node with e.g. DomDocument_create_element() und add it with DomNode_append_child() . |
DomNode_children | DomNode_child_nodes() |
DomNode_parent | DomNode_parent_node() |
DomNode_new_child | 例えば DomDocument_create_element() で 新規ノードを作成し、 DomNode_append_child() で追加します。 |
DomNode_set_content | 例えば DomDocument_create_element() で 新規ノードを作成し、 DomNode_append_child() で追加します。 |
DomNode_get_content | コンテンツはテキストノードであり、 DomNode_child_nodes() でアクセス可能です。 |
DomNode_set_content | コンテンツはテキストノードであり、 DomNode_append_child() で追加できます。 |
これらの定数は、この拡張モジュールで定義されており、
この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー
ドされるかのどちらかの場合のみ使用可能です。
表 2XML定数
定数 | 値 | 説明 |
---|---|---|
XML_ELEMENT_NODE | 1 | ノードは要素(element)である |
XML_ATTRIBUTE_NODE | 2 | ノードは属性(attribute)である |
XML_TEXT_NODE | 3 | ノードはテキストの一部である |
XML_CDATA_SECTION_NODE | 4 | |
XML_ENTITY_REF_NODE | 5 | |
XML_ENTITY_NODE | 6 | ノードは nbsp;のようなエンティティである |
XML_PI_NODE | 7 | ノードは処理命令(PI)である |
XML_COMMENT_NODE | 8 | ノードはコメントである |
XML_DOCUMENT_NODE | 9 | ノードはドキュメントである |
XML_DOCUMENT_TYPE_NODE | 10 | |
XML_DOCUMENT_FRAG_NODE | 11 | |
XML_NOTATION_NODE | 12 | |
XML_GLOBAL_NAMESPACE | 1 | |
XML_LOCAL_NAMESPACE | 2 | |
XML_HTML_DOCUMENT_NODE ( integer ) | ||
XML_DTD_NODE ( integer ) | ||
XML_ELEMENT_DECL_NODE ( integer ) | ||
XML_ATTRIBUTE_DECL_NODE ( integer ) | ||
XML_ENTITY_DECL_NODE ( integer ) | ||
XML_NAMESPACE_DECL_NODE ( integer ) | ||
XML_ATTRIBUTE_CDATA ( integer ) | ||
XML_ATTRIBUTE_ID ( integer ) | ||
XML_ATTRIBUTE_IDREF ( integer ) | ||
XML_ATTRIBUTE_IDREFS ( integer ) | ||
XML_ATTRIBUTE_ENTITY ( integer ) | ||
XML_ATTRIBUTE_NMTOKEN ( integer ) | ||
XML_ATTRIBUTE_NMTOKENS ( integer ) | ||
XML_ATTRIBUTE_ENUMERATION ( integer ) | ||
XML_ATTRIBUTE_NOTATION ( integer ) | ||
XPATH_UNDEFINED ( integer ) | ||
XPATH_NODESET ( integer ) | ||
XPATH_BOOLEAN ( integer ) | ||
XPATH_NUMBER ( integer ) | ||
XPATH_STRING ( integer ) | ||
XPATH_POINT ( integer ) | ||
XPATH_RANGE ( integer ) | ||
XPATH_LOCATIONSET ( integer ) | ||
XPATH_USERS ( integer ) | ||
XPATH_NUMBER ( integer ) |
モジュールのAPIは、DOMレベル2標準に可能な限り基づいています。結果
的にAPIは完全にオブジェクト指向です。このモジュールを使用する際に
DOM標準が利用できることは望ましいことです。
このAPIはオブジェクト指向ですが、最初の引数として処理するオブジェ
クトを渡すオブジェクト指向でない方法でコールすることができる多く
の関数があります。これらの関数は、主に過去のバージョンとの互換性
確保のために維持されていますが、新規開発での使用はもはや推奨され ません。
このAPIは、公式なDOM APIとは二つの点で異なっています。まず、全て
のクラスの属性は、同じ名前を有する関数として実装され、関数名はPHP
の命名表記に基づいています。これは、DOM関数lastChild()が
last_child()と書かれることを意味します。
このモジュールは、一連のクラスを定義します。メソッドも含めたリス
トを以下の表に示します。クラスは、DOM標準でDOMxxxという名前のもの と等価です。
表 3クラスの一覧
クラス名 | 親クラス |
---|---|
DomAttribute | DomNode |
DomCData | DomNode |
DomComment | DomCData : DomNode |
DomDocument | DomNode |
DomDocumentType | DomNode |
DomElement | DomNode |
DomEntity | DomNode |
DomEntityReference | DomNode |
DomProcessingInstruction | DomNode |
DomText | DomCData : DomNode |
Parser | 現在はまだDomParserと呼ばれています |
XPathContext |
表 4DomDocument クラス (DomDocument : DomNode)
メソッド名 | 関数名 | 注意 |
---|---|---|
doctype | DomDocument_doctype() | |
document_elemnent | DomDocument_document_element() | |
create_element | DomDocument_create_element() | |
create_text_node | DomDocument_create_text_node() | |
create_comment | DomDocument_create_comment() | |
create_cdata_section | DomDocument_create_cdata_section() | |
create_processing_instruction | DomDocument_create_processing_instruction() | |
create_attribute | DomDocument_create_attribute() | |
create_entity_reference | DomDocument_create_entity_reference() | |
get_elements_by_tagname | DomDocument_get_elements_by_tagname() | |
get_element_by_id | DomDocument_get_element_by_id() | |
dump_mem | DomDocument_dump_mem() | DOM標準ではない |
dump_file | DomDocument_dump_file() | DOM標準ではない |
html_dump_mem | DomDocument_html_dump_mem() | DOM標準ではない |
xpath_init | xpath_init | DOM標準ではない |
xpath_new_context | xpath_new_context | DOM標準ではない |
xptr_new_context | xptr_new_context | DOM標準ではない |
表 5DomElement クラス (DomElement : DomNode)
メソッド名 | 関数名 | 注意 |
---|---|---|
tagname | DomElement_tagname() | |
get_attribute | DomElement_get_attribute() | |
set_attribute | DomElement_set_attribute() | |
remove_attribute | DomElement_remove_attribute() | |
get_attribute_node | DomElement_get_attribute_node() | |
set_attribute_node | DomElement_set_attribute_node() | |
get_elements_by_tagname | DomElement_get_elements_by_tagname() | |
has_attribute | DomElement_has_attribute() |
表 6DomNode クラス
メソッド名 | 注意 |
---|---|
DomNode_node_name() | |
DomNode_node_value() | |
DomNode_node_type() | |
DomNode_last_child() | |
DomNode_first_child() | |
DomNode_child_nodes() | |
DomNode_previous_sibling() | |
DomNode_next_sibling() | |
DomNode_parent_node() | |
DomNode_owner_document() | |
DomNode_insert_before() | |
DomNode_append_child() | |
DomNode_remove_child() | |
DomNode_has_child_nodes() | |
DomNode_has_attributes() | |
DomNode_clone_node() | |
DomNode_attributes() | |
DomNode_unlink_node() | DOM標準ではない |
DomNode_replace_node() | DOM標準ではない |
DomNode_set_content() | DOM標準にはなく、古いメソッドです |
DomNode_get_content() | DOM標準にはなく、古いメソッドです |
DomNode_dump_node() | DOM標準ではない |
DomNode_is_blank_node() | DOM標準ではない |
表 7DomAttribute クラス (DomAttribute : DomNode)
メソッド名 | 注意 | |
---|---|---|
name | DomAttribute_name() | |
value | DomAttribute_value() | |
specified | DomAttribute_specified() |
表 8DomProcessingInstruction クラス
(DomProcessingInstruction : DomNode)
メソッド名 | 関数名 | 注意 |
---|---|---|
target | DomProcessingInstruction_target() | |
data | DomProcessingInstruction_data() |
表 10XPathContext クラス
メソッド名 | 関数名 | 注記 |
---|---|---|
eval | XPathContext_eval() | |
eval_expression | XPathContext_eval_expression() | |
register_ns | XPathContext_register_ns() |
表 11DomDocumentType クラス (DomDocumentType :
DomNode)
メソッド名 | 関数名 | 注記 |
---|---|---|
name | DomDocumentType_name() | |
entities | DomDocumentType_entities() | |
notations | DomDocumentType_notations() | |
public_id | DomDocumentType_public_id() | |
system_id | DomDocumentType_system_id() | |
internal_subset | DomDocumentType_internal_subset() |
クラスDomDtdはDomNodeから派生したものです。DomCommentはDomCDataか
ら派生したものです。
このリファレンスにおける多くの例は、XML文字列を必要とします。この
文字列を全ての例で繰りかえし記述するかわりに、ファイルに書き込ん
で、各例で読み込むことにします。この読み込まれるファイルは、以下
の例に示されています。XMLドキュメントを作成し、
DomDocument_open_file()
で読み込むことも可能で す。