XXX. DOM 関数

導入

DOM 拡張モジュールを使用すると、DOM API を使用した XML ドキュメントの操作を PHP 5 で行えます。

PHP 4 では DOM XML を使用します。

インストール手順

PHP コアに含まれるため、 追加のインストール無しで使用できます。

定義済みクラス

このモジュールの API は、DOM Level 3 の標準規格と可能な限り 一致させています。そのため、API は完全にオブジェクト指向となっています。 このモジュールを使用する際は、DOM 標準規格を意識することが大切です。

このモジュールで定義されている多くのクラスについて以下の表で説明します。 DOM 標準規格に相当するクラスについては DOMxxx という名前がつけられています。

DOMAttr

DOMNode を継承します。DOMAttr インターフェースは、DOMElement オブジェクトの 属性を表します。

コンストラクタ

メソッド

  • DOMAttr->isId() - 属性が定義済みの ID であるかどうかを調べる

プロパティ

表 1.

名前読み込み専用説明
namestringyes属性の名前
ownerElementDOMElementyes属性を保持する要素
schemaTypeInfoboolyes未実装です。常に NULL を返します。
specifiedboolyes未実装です。常に NULL を返します。
valuestringno属性の値

DOMCharacterData

DOMNode を継承します。

メソッド

プロパティ

表 2.

名前読み込み専用説明
datastringnoノードの内容
lengthintyes内容の長さ

DOMComment

DOMCharacterData を継承します。

コンストラクタ

DOMDocument

DOMNode を継承します。

コンストラクタ

メソッド

プロパティ

表 3.

名前読み込み専用説明
actualEncodingstringyes 
configDOMConfigurationyes 
doctypeDOMDocumentTypeyes このドキュメントに関連付けられた文書型宣言
documentElementDOMElementyes ドキュメントの子ノードであるドキュメント要素に対し、 直接アクセスするために便利な属性
documentURIstringno ドキュメントの位置。未定義の場合は NULL
encodingstringno 
formatOutputboolno 
implementationDOMImplementationyes このドキュメントを処理する DOMImplementation オブジェクト
preserveWhiteSpaceboolno余分な空白を取り除かない。デフォルトは TRUE
recoverboolno 
resolveExternalsboolno 文書型宣言で外部エンティティを読み込む際に TRUE を設定する。 XML ドキュメントに文字エンティティを含める際に便利です。
standaloneboolno 
strictErrorCheckingboolnoエラー時に DOMException をスローする。デフォルトは TRUE
substituteEntitiesboolno 
validateOnParseboolnoDTD を読み込んで検証する。デフォルトは FALSE
versionstringno 
xmlEncodingstringyes XML 宣言の一部として、このドキュメントのエンコーディングを 指定する属性。指定されていない場合や不明な場合 (たとえば ドキュメントがメモリ上に存在する場合など) は NULL
xmlStandaloneboolno XML 宣言の一部として、このドキュメントがスタンドアローンか どうかを指定する。指定されていない場合は FALSE
xmlVersionstringno XML 宣言の一部として、このドキュメントのバージョン番号を指定する。 バージョン番号が定義されておらず、ドキュメントが "XML" の機能を サポートしている場合は、値は "1.0"

DOMDocumentFragment

DOMNode を継承します。

メソッド

DOMDocumentType

DOMNode を継承します。

DOMDocumentdoctype 属性を保持しており、その値は NULL あるいは DOMDocumentType オブジェクトです。

プロパティ

表 4.

名前読み込み専用説明
publicIdstringyes外部サブセットの公開 ID
systemIdstringyes 外部サブセットのシステム ID。完全 URI である場合とそうでない場合がある。
namestringyes DTD の名前。すなわち、DOCTYPE キーワードに続く値
entitiesDOMNamedNodeMapyes DTD で宣言されている一般エンティティ (外部・内部とも) を含む DOMNamedNodeMap
notationsDOMNamedNodeMapyes DTD で宣言されている記法を含む DOMNamedNodeMap
internalSubsetstringyes 内部サブセットを文字列として取得する。存在しない場合は null となる。区切りの角括弧は含まない。

DOMElement

DOMNode を継承します。

コンストラクタ

メソッド

プロパティ

表 5.

名前読み込み専用説明
schemaTypeInfoboolyes未実装。常に NULL を返す。
tagNamestringyes要素名

DOMEntity

DOMNode を継承します。

このインターフェースは、XML ドキュメント内の既知のエンティティを表します。 パース済みかどうかは関係ありません。

プロパティ

表 6.

名前読み込み専用説明
publicIdstringyes エンティティに関連付けられているパブリック ID が存在すればその値、 それ以外の場合は NULL
systemIdstringyes エンティティに関連付けられているシステム ID が存在すればその値、 それ以外の場合は NULL。これは完全な URI かもしれないし、 そうでないかもしれない。
notationNamestringyes パースされていないエンティティの場合はそのエンティティの名前、 パース済みのエンティティの場合は NULL
actualEncodingstringno 外部でパースされたエンティティの場合は、このエンティティの パース時に使用されたエンコーディングを指定する属性。内部 サブセットからのエンティティであったり未知のエンティティで あった場合は NULL
encodingstringyes 外部でパースされたエンティティの場合は、テキスト宣言の一部として このエンティティのエンコーディングを指定する属性。それ以外の 場合は NULL
versionstringyes 外部でパースされたエンティティの場合は、テキスト宣言の一部として このエンティティのバージョン番号を指定する属性。それ以外の場合は NULL

DOMEntityReference

DOMNode を継承します。

コンストラクタ

DOMException

しかるべき状況、すなわち論理的に不可能な操作を行った際などの場合に DOM 操作は例外を発生させます。

第20章 も参照ください。

プロパティ

表 7.

名前読み込み専用説明
codeintyes発生したエラーの型を示す整数値

DOMImplementation

DOMImplementation インターフェースは、個々の ドキュメントオブジェクトモデルのインスタンス独自の操作を行うための メソッド群を提供します。

コンストラクタ

メソッド

DOMNamedNodeMap

メソッド

DOMNode

メソッド

プロパティ

表 8.

名前読み込み専用説明
nodeNamestringyes現在のノード型の正確な名前を返す
nodeValuestringnoその型に応じてノードの値を返す
nodeTypeintyesノードの型を、定義済みの定数 XML_xxx_NODE のいずれかで返す
parentNodeDOMNodeyesこのノードの親を返す
childNodesDOMNodeListyes このノードのすべての子を含む DOMNodeList。 子が存在しない場合は、空の DOMNodeList
firstChildDOMNodeyes このノードの最初の子。存在しない場合は NULL を返す
lastChildDOMNodeyes このノードの最後の子。存在しない場合は NULL を返す
previousSiblingDOMNodeyes このノードの直前のノード。存在しない場合は NULL を返す
nextSiblingDOMNodeyes このノードの直後のノード。存在しない場合は NULL を返す
attributesDOMNamedNodeMapyes このノードが DOMElement の場合は ノードの属性を含む DOMNamedNodeMap、 それ以外の場合は NULL
ownerDocumentDOMDocumentyes このノードに関連付けられている DOMDocument オブジェクト
namespaceURIstringyes このノードの名前空間 URI。指定されていない場合は NULL
prefixstringno このノードの名前空間プレフィックス。指定されていない場合は NULL
localNamestringyes このノードの名前のローカル部分を返す
baseURIstringyes このノードの完全なベース URI。もし実装が完全な URL を できなかった場合は NULL
textContentstringno このノードとその子孫ノードのテキストを返す

DOMNodeList

メソッド

プロパティ

表 9.

名前読み込み専用説明
lengthintyes リスト内のノードの数。有効な子ノードのインデックスの範囲は 0 以上 length - 1 以下

DOMNotation

DOMNode を継承します。

プロパティ

表 10.

名前読み込み専用説明
publicIdstringyes 
systemIdstringyes 

DOMProcessingInstruction

DOMNode を継承します。

コンストラクタ

プロパティ

表 11.

名前読み込み専用説明
targetstringyes 
datastringno 

DOMText

DOMCharacterData を継承します。

コンストラクタ

メソッド

プロパティ

表 12.

名前読み込み専用説明
wholeTextstringyes 

DOMXPath

コンストラクタ

メソッド

プロパティ

表 13.

名前読み込み専用説明
documentDOMDocument  

このリファレンスの多くの例では XML ファイルを使用します。その際には、 以下のような形式の book.xml を使用します。

例 1. book.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
 "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
]>
<book id="listing">
 <title>My lists</title>
 <chapter id="books">
  <title>My books</title>
  <para>
   <informaltable>
    <tgroup cols="4">
     <thead>
      <row>
       <entry>Title</entry>
       <entry>Author</entry>
       <entry>Language</entry>
       <entry>ISBN</entry>
      </row>
     </thead>
     <tbody>
      <row>
       <entry>The Grapes of Wrath</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>0140186409</entry>
      </row>
      <row>
       <entry>The Pearl</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>014017737X</entry>
      </row>
      <row>
       <entry>Samarcande</entry>
       <entry>Amine Maalouf</entry>
       <entry>fr</entry>
       <entry>2253051209</entry>
      </row>
      <!-- TODO: I have a lot of remaining books to add.. -->
     </tbody>
    </tgroup>
   </informaltable>
  </para>
 </chapter>
</book>

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

表 14. XML 定数

定数説明
XML_ELEMENT_NODE (integer) 1ノードは DOMElement です。
XML_ATTRIBUTE_NODE (integer) 2ノードは DOMAttr です。
XML_TEXT_NODE (integer) 3ノードは DOMText です。
XML_CDATA_SECTION_NODE (integer) 4ノードは DOMCharacterData です。
XML_ENTITY_REF_NODE (integer) 5ノードは DOMEntityReference です。
XML_ENTITY_NODE (integer) 6ノードは DOMEntity です。
XML_PI_NODE (integer) 7ノードは DOMProcessingInstruction です。
XML_COMMENT_NODE (integer) 8ノードは DOMComment です。
XML_DOCUMENT_NODE (integer) 9ノードは DOMDocument です。
XML_DOCUMENT_TYPE_NODE (integer) 10ノードは DOMDocumentType です。
XML_DOCUMENT_FRAG_NODE (integer) 11ノードは DOMDocumentFragment です。
XML_NOTATION_NODE (integer) 12ノードは DOMNotation です。
XML_HTML_DOCUMENT_NODE (integer) 13 
XML_DTD_NODE (integer) 14 
XML_ELEMENT_DECL_NODE (integer) 15 
XML_ATTRIBUTE_DECL_NODE (integer) 16 
XML_ENTITY_DECL_NODE (integer) 17 
XML_NAMESPACE_DECL_NODE (integer) 18 
XML_ATTRIBUTE_CDATA (integer) 1 
XML_ATTRIBUTE_ID (integer) 2 
XML_ATTRIBUTE_IDREF (integer) 3 
XML_ATTRIBUTE_IDREFS (integer) 4 
XML_ATTRIBUTE_ENTITY (integer) 5 
XML_ATTRIBUTE_NMTOKEN (integer) 7 
XML_ATTRIBUTE_NMTOKENS (integer) 8 
XML_ATTRIBUTE_ENUMERATION (integer) 9 
XML_ATTRIBUTE_NOTATION (integer) 10 

表 15. DOMException 定数

定数説明
DOM_INDEX_SIZE_ERR (integer) 1 インデックスあるいはサイズが負です。または上限を超えています。
DOMSTRING_SIZE_ERR (integer) 2 指定したテキストは DOMString 内に収まりません。
DOM_HIERARCHY_REQUEST_ERR (integer) 3そのノードが所属できない場所に挿入されました。
DOM_WRONG_DOCUMENT_ERR (integer) 4 ノードが、もともと作成されたのと別のドキュメントで使用されました。
DOM_INVALID_CHARACTER_ERR (integer) 5 名前などで、不正な文字が指定されました。
DOM_NO_DATA_ALLOWED_ERR (integer) 6 データをサポートしていないノードでデータが指定されました。
DOM_NO_MODIFICATION_ALLOWED_ERR (integer) 7 変更が許可されていないオブジェクトを変更しようとしました。
DOM_NOT_FOUND_ERR (integer) 8 存在しないノードを参照しようとしました。
DOM_NOT_SUPPORTED_ERR (integer) 9 指定した型のオブジェクトや操作は、この実装ではサポートしていません。
DOM_INUSE_ATTRIBUTE_ERR (integer) 10 別の場所で使用中の属性を追加しようとしました。
DOM_INVALID_STATE_ERR (integer) 11 現在使用できない、あるいは使用できなくなったオブジェクトを 使用しようとしました。
DOM_SYNTAX_ERR (integer) 12不正な文字列が指定されました。
DOM_INVALID_MODIFICATION_ERR (integer) 13基底オブジェクトの型を変更しようとしました。
DOM_NAMESPACE_ERR (integer) 14 名前空間に存在しないオブジェクトを作成または変更しようとしました。
DOM_INVALID_ACCESS_ERR (integer) 15 パラメータや操作は基底オブジェクトではサポートされていません。
DOM_VALIDATION_ERR (integer) 16 insertBefore や removeChild のようなメソッドのコールによってノードの 「部分的な妥当性」が満たされなくなった際にこの例外が発生し、操作は 行われません。
目次
DOMAttr->__construct() --  新しい DOMAttr オブジェクトを作成する
DOMAttr->isId() --  属性が定義済みの ID かどうかを調べる
DOMCharacterData->appendData() --  ノードの文字データの最後に文字列を追加する
DOMCharacterData->deleteData() --  指定した範囲の文字列をノードから削除する
DOMCharacterData->insertData() --  指定した 16 ビット単位のオフセットに、文字列を挿入する
DOMCharacterData->replaceData() --  DOMCharacterData ノードの文字列の一部を置換する
DOMCharacterData->substringData() --  ノードから指定した範囲のデータを抽出する
DOMComment->__construct() --  新しい DOMComment オブジェクトを作成する
DOMDocument->__construct() --  新しい DOMDocument オブジェクトを作成する
DOMDocument->createAttribute() -- 新しい属性を作成する
DOMDocument->createAttributeNS() --  関連付けられた名前空間に新しい属性を作成する
DOMDocument->createCDATASection() -- 新しい cdata ノードを作成する
DOMDocument->createComment() -- 新しい comment ノードを作成する
DOMDocument->createDocumentFragment() -- 新しい文書片を作成する
DOMDocument->createElement() -- 新しい要素ノードを作成する
DOMDocument->createElementNS() --  関連付けられた名前空間に新しい要素を作成する
DOMDocument->createEntityReference() -- 新しいエンティティ参照ノードを作成する
DOMDocument->createProcessingInstruction() -- 新しい PI ノードを作成する
DOMDocument->createTextNode() -- 新しいテキストノードを作成する
DOMDocument->getElementById() -- id に対応する要素を検索する
DOMDocument->getElementsByTagName() -- 指定したタグ名に対応するすべての要素を検索する
DOMDocument->getElementsByTagNameNS() --  指定した名前空間で、タグ名に対応するすべての要素を検索する
DOMDocument->importNode() -- 現在のドキュメントにノードをインポートする
DOMDocument->load() --  ファイルから XML を読み込む
DOMDocument->loadHTML() --  文字列から HTML を読み込む
DOMDocument->loadHTMLFile() --  ファイルから HTML を読み込む
DOMDocument->loadXML() --  文字列から XML を読み込む
DOMDocument->normalizeDocument() -- ドキュメントを正規化する
DOMDocument->registerNodeClass() -- 基底ノード型を作成する際に使用する拡張クラスを登録する
DOMDocument->relaxNGValidate() --  ドキュメントを relaxNG で検証する
DOMDocument->relaxNGValidateSource() --  ドキュメントを relaxNG で検証する
DOMDocument->save() --  内部の XML ツリーをファイルに出力する
DOMDocument->saveHTML() --  内部のドキュメントを HTML 形式の文字列として出力する
DOMDocument->saveHTMLFile() --  内部のドキュメントを HTML 形式でファイルに出力する
DOMDocument->saveXML() --  内部の XML ツリーを文字列として出力する
DOMDocument->schemaValidate() --  スキーマに基づいてドキュメントを検証する
DOMDocument->schemaValidateSource() --  スキーマに基づいてドキュメントを検証する
DOMDocument->validate() --  DTD に基づいてドキュメントを検証する
DOMDocument->xinclude() --  DOMDocument オブジェクト内の XIncludes を置換する
DOMDocumentFragment->appendXML() -- 生の XML データを追加する
DOMElement->__construct() --  新しい DOMElement オブジェクトを作成する
DOMElement->getAttribute() -- 属性の値を返す
DOMElement->getAttributeNode() -- 属性ノードを返す
DOMElement->getAttributeNodeNS() --  属性ノードを返す
DOMElement->getAttributeNS() -- 属性の値を返す
DOMElement->getElementsByTagName() -- タグ名から要素を取得する
DOMElement->getElementsByTagNameNS() -- 名前空間 URI とローカル名から要素を取得する
DOMElement->hasAttribute() -- 属性が存在するかどうかを調べる
DOMElement->hasAttributeNS() --  属性が存在するかどうかを調べる
DOMElement->removeAttribute() -- 属性を削除する
DOMElement->removeAttributeNode() -- 属性を削除する
DOMElement->removeAttributeNS() -- 属性を削除する
DOMElement->setAttribute() -- 新しい属性を追加する
DOMElement->setAttributeNode() -- 新しい属性ノードを要素に追加する
DOMElement->setAttributeNodeNS() -- 新しい属性ノードを要素に追加する
DOMElement->setAttributeNS() -- 新しい属性を追加する
DOMElement->setIdAttribute() -- ID 型の属性を名前で宣言する
DOMElement->setIdAttributeNode() -- ID 型の属性をノードで宣言する
DOMElement->setIdAttributeNS() -- ID 型の属性をローカル名および名前空間 URI で宣言する
DOMEntityReference->__construct() --  新しい DOMEntityReference オブジェクトを作成する
DOMImplementation->__construct() --  新しい DOMImplementation オブジェクトを作成する
DOMImplementation->createDocument() --  指定した型とドキュメント要素の DOMDocument オブジェクトを作成する
DOMImplementation->createDocumentType() --  空の DOMDocumentType オブジェクトを作成する
DOMImplementation->hasFeature() --  DOM implementation が、指定した機能を実装しているかどうかを調べる
DOMNamedNodeMap->getNamedItem() --  名前で指定されたノードを取得する
DOMNamedNodeMap->getNamedItemNS() --  ローカル名および名前空間 URI で指定したノードを取得する
DOMNamedNodeMap->item() -- インデックスで指定したノードを取得する
DOMNode->appendChild() --  子要素群の最後に新しい子要素を追加する
DOMNode->cloneNode() --  ノードを複製する
DOMNode->hasAttributes() --  ノードが属性を保持しているかどうかを調べる
DOMNode->hasChildNodes() --  ノードが子を保持しているかどうかを調べる
DOMNode->insertBefore() --  参照しているノードの前に新しい子を追加する
DOMNode->isDefaultNamespace() -- 指定した namespaceURI がデフォルトの名前空間かどうかを調べる
DOMNode->isSameNode() --  2 つのノードが等しいかどうかを調べる
DOMNode->isSupported() --  指定したバージョンで機能がサポートされているかどうかを調べる
DOMNode->lookupNamespaceURI() --  プレフィックスに基づいて、ノードの名前空間 URI を取得する
DOMNode->lookupPrefix() --  名前空間 URI に基づいて、ノードの名前空間プレフィックスを取得する
DOMNode->normalize() --  ノードを正規化する
DOMNode->removeChild() --  子要素群から子要素を削除する
DOMNode->replaceChild() --  子を置き換える
DOMNodelist->item() --  インデックスで指定したノードを取得する
DOMProcessingInstruction->__construct() --  新しい DOMProcessingInstruction オブジェクトを作成する
DOMText->__construct() --  新しい DOMText オブジェクトを作成する
DOMText->isWhitespaceInElementContent() --  このテキストノードが空白を含むかどうかを示す
DOMText->splitText() --  指定したオフセットでノードを 2 つに分割する
DOMXPath->__construct() --  新しい DOMXPath オブジェクトを作成する
DOMXPath->evaluate() --  与えられた XPath 式を評価し、可能であれば結果を返す
DOMXPath->query() --  与えられた XPath 式を評価する
DOMXPath->registerNamespace() --  DOMXPath オブジェクトの名前空間を登録する
dom_import_simplexml --  SimpleXMLElement オブジェクトから DOMElement オブジェクトを取得する