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()関数を使用して下さい。

必要なもの

この拡張モジュールは、PHPのconfigureが GNOME XMLライブラリを用いて --with-dom=[DIR]を指定して 実行されている場合のみ利用可能です。libxml-2.2.7以降が必要です。

古い関数

表 1古い関数とその代替関数

古い関数新しい関数
xmldocdomxml_open_mem()
xmldocfieldomxml_open_file()
domxml_new_xmldocdomxml_new_doc()
domxml_dump_memDomDocument_dump_mem()
domxml_dump_mem_fileDomDocument_dump_file()
DomDocument_dump_mem_fileDomDocument_dump_file()
DomDocument_add_root DomDocument_create_element()の後に DomNode_append_child()
DomDocument_dtdDomDocument_doctype()
DomDocument_rootDomDocument_document_element()
DomDocument_childrenDomNode_child_nodes()
DomDocument_imported_nodeNo replacement.
DomNode_add_child Create a new node with e.g. DomDocument_create_element() und add it with DomNode_append_child().
DomNode_childrenDomNode_child_nodes()
DomNode_parentDomNode_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()で追加できます。

定数

このモジュールは、以下の定数を定義します。

表 2XML定数

定数説明
XML_ELEMENT_NODE1ノードは要素(element)である
XML_ATTRIBUTE_NODE2ノードは属性(attribute)である
XML_TEXT_NODE3ノードはテキストの一部である
XML_CDATA_SECTION_NODE4 
XML_ENTITY_REF_NODE5 
XML_ENTITY_NODE6ノードは のようなエンティティである
XML_PI_NODE7ノードは処理命令(PI)である
XML_COMMENT_NODE8ノードはコメントである
XML_DOCUMENT_NODE9ノードはドキュメントである
XML_DOCUMENT_TYPE_NODE10 
XML_DOCUMENT_FRAG_NODE11 
XML_NOTATION_NODE12 
XML_GLOBAL_NAMESPACE1 
XML_LOCAL_NAMESPACE2 

クラス

モジュールのAPIは、DOMレベル2標準に可能な限り基づいています。結果 的にAPIは完全にオブジェクト指向です。このモジュールを使用する際に DOM標準が利用できることは望ましいことです。 このAPIはオブジェクト指向ですが、最初の引数として処理するオブジェ クトを渡すオブジェクト指向でない方法でコールすることができる多く の関数があります。これらの関数は、主に過去のバージョンとの互換性 確保のために維持されていますが、新規開発での使用はもはや推奨され ません。

このAPIは、公式なDOM APIとは二つの点で異なっています。まず、全て のクラスの属性は、同じ名前を有する関数として実装され、関数名はPHP の命名表記に基づいています。これは、DOM関数lastChild()が last_child()と書かれることを意味します。

このモジュールは、一連のクラスを定義します。メソッドも含めたリス トを以下の表に示します。クラスは、DOM標準でDOMxxxという名前のもの と等価です。

表 3クラスの一覧

クラス名親クラス
DomAttributeDomNode
DomCDataDomNode
DomCommentDomCData : DomNode
DomDocumentDomNode
DomDocumentTypeDomNode
DomElementDomNode
DomEntityDomNode
DomEntityReferenceDomNode
DomProcessingInstructionDomNode
DomTextDomCData : DomNode
Parser現在はまだDomParserと呼ばれています
XPathContext 

表 4DomDocument クラス (DomDocument : DomNode)

メソッド名関数名注意
doctypeDomDocument_doctype() 
document_elemnentDomDocument_document_element() 
create_elementDomDocument_create_element() 
create_text_nodeDomDocument_create_text_node() 
create_commentDomDocument_create_comment() 
create_cdata_sectionDomDocument_create_cdata_section() 
create_processing_instructionDomDocument_create_processing_instruction() 
create_attributeDomDocument_create_attribute() 
create_entity_referenceDomDocument_create_entity_reference() 
get_elements_by_tagnameDomDocument_get_elements_by_tagname() 
get_element_by_idDomDocument_get_element_by_id() 
dump_memDomDocument_dump_mem()DOM標準ではない
dump_fileDomDocument_dump_file()DOM標準ではない
html_dump_memDomDocument_html_dump_mem()DOM標準ではない
xpath_initxpath_initDOM標準ではない
xpath_new_contextxpath_new_contextDOM標準ではない
xptr_new_contextxptr_new_contextDOM標準ではない

表 5DomElement クラス (DomElement : DomNode)

メソッド名関数名注意
tagnameDomElement_tagname() 
get_attributeDomElement_get_attribute() 
set_attributeDomElement_set_attribute() 
remove_attributeDomElement_remove_attribute() 
get_attribute_nodeDomElement_get_attribute_node() 
set_attribute_nodeDomElement_set_attribute_node() 
get_elements_by_tagnameDomElement_get_elements_by_tagname() 
has_attributeDomElement_has_attribute() 

表 7DomAttribute クラス (DomAttribute : DomNode)

メソッド名 注意
nameDomAttribute_name() 
valueDomAttribute_value() 
specifiedDomAttribute_specified() 

表 8DomProcessingInstruction クラス (DomProcessingInstruction : DomNode)

メソッド名関数名注意
targetDomProcessingInstruction_target() 
dataDomProcessingInstruction_data() 

表 9Parser クラス

メソッド名関数名注記
add_chunkParser_add_chunk() 
endParser_end() 

表 10XPathContext クラス

メソッド名関数名注記
evalXPathContext_eval() 
eval_expressionXPathContext_eval_expression() 
register_nsXPathContext_register_ns() 

表 11DomDocumentType クラス (DomDocumentType : DomNode)

メソッド名関数名注記
nameDomDocumentType_name() 
entitiesDomDocumentType_entities() 
notationsDomDocumentType_notations() 
public_idDomDocumentType_public_id() 
system_idDomDocumentType_system_id() 
internal_subsetDomDocumentType_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 --  新規エレメントノードを作成する
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ツリーをダンプする
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 --  属性の値を返す
DomElement->get_attribute_node --  属性の値を返す
DomElement->get_elements_by_tagname --  タグ名により要素を取得する
DomElement->has_attribute --  属性があるかどうかを調べる
DomElement->remove_attribute --  属性を削除する
DomElement->set_attribute --  新規属性を追加する
DomElement->set_attribute_node --  新規属性を設定する
DomElement->tagname --  要素名を返す
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->unlink_node --  ノードを削除する
DomProcessingInstruction->data --  PIノードのデータを返す
DomProcessingInstruction->target --  PIノードのターゲットを返す
domxml_new_doc --  空のXMLドキュメントを作成する
domxml_open_file -- XMLファイルからDOMオブジェクトを作成する
domxml_open_mem -- XMLドキュメントからDOMオブジェクトを作成する
domxml_version --  XMLライブラリのバージョンを取得する
domxml_xmltree --  XMLドキュメントからPHPオブジェクトツリーを作成する
xpath_eval --  指定した文字列のXPathロケーションを評価する
xpath_eval_expression --  指定した文字列のXPathロケーション式を評価する
xpath_new_context --  新規xpathコンテキストを作成する
xptr_eval --  指定した文字列のXPtrロケーションパスを評価する
xptr_new_context --  新規XPathコンテキストを作成する