XXVDOM XML関数

導入

警告

このモジュールは、 実験的 なものです。これは、これらの関数の動作、関数名は、このドキュメントに書かれて事項と同様に告知なく将来的なPHPのリリースで変更される可能性があります。注意を喚起するとともに、このモジュールは使用者のリスクで使用して下さい。

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()


表 9Parser クラス

メソッド名 関数名 注記
add_chunk Parser_add_chunk()
end Parser_end()


表 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() で読み込むことも可能で す。

例 1XML文字列を有するファイルexample.incを読み込む

 ?php
$xmlstr = " ?xml version='1.0' standalone='yes'? 
 !DOCTYPE chapter SYSTEM
'/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd'
[  !ENTITY sp \"spanish\" 
] 
 !-- lsfj  -- 
 chapter language='en'  title language='en' Title /title 
  para language='ge' 
   amp;sp;
   !-- comment -- 
   informaltable ID='findme' language=' amp;sp;' 
    tgroup cols='3' 
     tbody 
      row  entry a1 /entry  entry
morerows='1' b1 /entry  entry c1 /entry  /row 
 row  entry a2 /entry  entry c2 /entry  /row 
      row  entry a3 /entry  entry b3 /entry  entry c3 /entry  /row 
     /tbody 
    /tgroup 
   /informaltable 
  /para 
 /chapter ";
? 


目次
DomAttribute- name -- 属性の名前を返す
DomAttribute- specified -- 属性が指定されているかどうか調べる
DomAttribute- value -- 属性の値を返す
DomDocument- add_root [deprecated] -- ルートノードを追加する
DomDocument- create_attribute -- 新規属性を作成する
DomDocument- create_cdata_section -- 新規cdataノードを作成する
DomDocument- create_comment -- 新規コメントノードを作成する
DomDocument- create_element_ns -- Create new element node with an associated namespace
DomDocument- create_element -- 新規エレメントノードを作成する
DomDocument- create_entity_reference --
DomDocument- create_processing_instruction -- 新規PIノードを作成する
DomDocument- create_text_node -- 新規テキストノードを作成する
DomDocument- doctype -- ドキュメント型を返す
DomDocument- document_element -- ルートエレメントノードを返す
DomDocument- dump_file -- 内部XMLツリーをファイルにダンプする
DomDocument- dump_mem -- 内部XMLツリーを文字列にダンプする
DomDocument- get_element_by_id --
DomDocument- get_elements_by_tagname --
DomDocument- html_dump_mem -- HTMLとして文字列に内部XMLツリーをダンプする
DomDocument- xinclude -- Substitutes XIncludes in a DomDocument Object.
DomDocumentType- entities -- エントリのリスト返す
DomDocumentType- internal_subset -- 内部サブセットを返す
DomDocumentType- name -- ドキュメントの型名を返す
DomDocumentType- notations -- ノーテーションのリストを返す
DomDocumentType- public_id -- document typeのpublic IDを返す
DomDocumentType- system_id -- document typeのsystem IDを返す
DomElement- get_attribute_node -- 属性の値を返す
DomElement- get_attribute -- 属性の値を返す
DomElement- get_elements_by_tagname -- タグ名により要素を取得する
DomElement- has_attribute -- 属性があるかどうかを調べる
DomElement- remove_attribute -- 属性を削除する
DomElement- set_attribute_node -- 新規属性を設定する
DomElement- set_attribute -- 新規属性を追加する
DomElement- tagname -- 要素名を返す
DomNode- add_namespace -- Adds a namespace declaration to a node.
DomNode- append_child -- 子ノードの最後に新規に子ノードを追加する
DomNode- append_sibling -- 新規に兄弟をノードに追加する
DomNode- attributes -- 属性のリストを返す
DomNode- child-nodes -- 子ノードを返す
DomNode- clone_node -- ノードの複製を作る
DomNode- dump_node -- ノードを1つダンプする
DomNode- first_child -- 最初の子ノードを返す
DomNode- get_content -- ノードのコンテンツを取得する
DomNode- has_attributess -- ノードが属性を有しているかを調べる
DomNode- has_child_nodes -- ノードが子ノードを有しているかを調べる
DomNode- insert_before -- 新規ノードを子ノードとして挿入する
DomNode- is_blank_node -- ノードが空かどうか調べる
DomNode- last_child -- 最後の子ノードを返す
DomNode- next_sibling -- 次の兄弟ノードを返す
DomNode- node_name -- ノード名を返す
DomNode- node_type -- ノードの型を返す
DomNode- node_value -- ノードの値を返す
DomNode- owner_document -- このノードが属するドキュメントを返す
DomNode- parent_node -- 親ノードを返す
DomNode- prefix -- ノードの名前空間接頭辞を返す
DomNode- previous_sibling -- 前の兄弟ノードを返す
DomNode- remove_child -- 子ノードのリストから子ノードを削除する
DomNode- replace_child -- Replaces a child
DomNode- replace_node -- ノードを置換する
DomNode- set_content -- ノードのコンテンツを設定する
DomNode- set_name -- ノードの名前を設定する
DomNode- set_namespace -- Sets namespace of a node.
DomNode- unlink_node -- ノードを削除する
DomProcessingInstruction- data -- PIノードのデータを返す
DomProcessingInstruction- target -- PIノードのターゲットを返す
DomXsltStylesheet- process -- Applies the XSLT-Transformation on a DomDocument Object.
DomXsltStylesheet- result_dump_file -- Dumps the result from a XSLT-Transformation into a file
DomXsltStylesheet- result_dump_mem -- Dumps the result from a XSLT-Transformation back into a string
domxml_new_doc -- 空のXMLドキュメントを作成する
domxml_open_file -- XMLファイルからDOMオブジェクトを作成する
domxml_open_mem -- XMLドキュメントからDOMオブジェクトを作成する
domxml_version -- XMLライブラリのバージョンを取得する
domxml_xmltree -- XMLドキュメントからPHPオブジェクトツリーを作成する
domxml_xslt_stylesheet_doc -- Creates a DomXsltStylesheet Object from a DomDocument Object.
domxml_xslt_stylesheet_file -- Creates a DomXsltStylesheet Object from a xsl document in a file.
domxml_xslt_stylesheet -- Creates a DomXsltStylesheet Object from a xml document in a string.
xpath_eval_expression -- 指定した文字列のXPathロケーション式を評価する
xpath_eval -- 指定した文字列のXPathロケーションを評価する
xpath_new_context -- 新規xpathコンテキストを作成する
xptr_eval -- 指定した文字列のXPtrロケーションパスを評価する
xptr_new_context -- 新規XPathコンテキストを作成する