DOM 拡張モジュールは、PHP 4 の DOM XML 拡張モジュールの後継となる ものです。この拡張にはいまだに古い関数も含まれていますが、それらは もはや使用されません。オブジェクト指向ではない関数の使用は 避けるべきです。
この拡張モジュールは DOM API を使用した XML ドキュメントの 操作法を提供します。
PHP コアに含まれるため、 追加のインストール無しで使用できます。
このモジュールの API は、DOM Level 2 の標準規格と可能な限り 一致させています。そのため、API は完全にオブジェクト指向となっています。 このモジュールを使用する際は、DOM 標準規格を意識することが大切です。
このモジュールで定義されている多くのクラスについて以下の表で説明します。 DOM 標準規格に相当するクラスについては DOMxxx という名前がつけられています。
DOMNode を継承します。DOMAttr インターフェースは、DOMElement オブジェクトの 属性を表します。
DOMAttr->__construct() - 新しい DOMAttr オブジェクトを作成する
DOMAttr->isId() - 属性が定義済みの ID であるかどうかを調べる
DOMNode を継承します。
DOMCharacterData->appendData() - ノードの文字データの最後に文字列を追加する
DOMCharacterData->deleteData() - 指定した範囲の文字列をノードから削除する
DOMCharacterData->insertData() - 指定した 16 ビット単位のオフセットに、文字列を挿入する
DOMCharacterData->replaceData() - DOMCharacterData ノードの文字列の一部を置換する
DOMCharacterData->substringData() - ノードから指定した範囲のデータを抽出する
DOMNode を継承します。
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->normalize() - ドキュメントを正規化する
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 を置換する
表 3.
名前 | 型 | 読み込み専用 | 説明 |
---|---|---|---|
actualEncoding | string | yes | |
config | DOMConfiguration | yes | |
doctype | DOMDocumentType | yes | このドキュメントに関連付けられた文書型宣言 |
documentElement | DOMElement | yes | ドキュメントの子ノードであるドキュメント要素に対し、 直接アクセスするために便利な属性 |
documentURI | string | no | ドキュメントの位置。未定義の場合は NULL |
encoding | string | no | |
formatOutput | bool | no | |
implementation | DOMImplementation | yes | このドキュメントを処理する DOMImplementation オブジェクト |
preserveWhiteSpace | bool | no | 余分な空白を取り除かない。デフォルトは TRUE |
recover | bool | no | |
resolveExternals | bool | no | 文書型宣言で外部エンティティを読み込む際に TRUE を設定する。 XML ドキュメントに文字エンティティを含める際に便利です。 |
standalone | bool | no | |
strictErrorChecking | bool | no | エラー時に DOMException をスローする。デフォルトは TRUE |
substituteEntities | bool | no | |
validateOnParse | bool | no | DTD を読み込んで検証する。デフォルトは FALSE |
version | string | no | |
xmlEncoding | string | yes | XML 宣言の一部として、このドキュメントのエンコーディングを 指定する属性。指定されていない場合や不明な場合 (たとえば ドキュメントがメモリ上に存在する場合など) は NULL |
xmlStandalone | bool | no | XML 宣言の一部として、このドキュメントがスタンドアローンか どうかを指定する。指定されていない場合は FALSE |
xmlVersion | string | no | XML 宣言の一部として、このドキュメントのバージョン番号を指定する。 バージョン番号が定義されておらず、ドキュメントが "XML" の機能を サポートしている場合は、値は "1.0" |
DOMNode を継承します。
各 DOMDocument は doctype 属性を保持しており、その値は NULL あるいは DOMDocumentType オブジェクトです。
表 4.
名前 | 型 | 読み込み専用 | 説明 |
---|---|---|---|
publicId | string | yes | 外部サブセットの公開 ID |
systemId | string | yes | 外部サブセットのシステム ID。完全 URI である場合とそうでない場合がある。 |
name | string | yes | DTD の名前。すなわち、DOCTYPE キーワードに続く値 |
entities | DOMNamedNodeMap | yes | DTD で宣言されている一般エンティティ (外部・内部とも) を含む DOMNamedNodeMap |
notations | DOMNamedNodeMap | yes | DTD で宣言されている記法を含む DOMNamedNodeMap |
internalSubset | string | yes | 内部サブセットを文字列として取得する。存在しない場合は null となる。区切りの角括弧は含まない。 |
DOMNode を継承します。
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() - 新しい属性を追加する
DOMNode を継承します。
このインターフェースは、XML ドキュメント内の既知のエンティティを表します。 パース済みかどうかは関係ありません。
表 6.
名前 | 型 | 読み込み専用 | 説明 |
---|---|---|---|
publicId | string | yes | エンティティに関連付けられているパブリック ID が存在すればその値、 それ以外の場合は NULL |
systemId | string | yes | エンティティに関連付けられているシステム ID が存在すればその値、 それ以外の場合は NULL。これは完全な URI かもしれないし、 そうでないかもしれない。 |
notationName | string | yes | パースされていないエンティティの場合はそのエンティティの名前、 パース済みのエンティティの場合は NULL |
actualEncoding | string | no | 外部でパースされたエンティティの場合は、このエンティティの パース時に使用されたエンコーディングを指定する属性。内部 サブセットからのエンティティであったり未知のエンティティで あった場合は NULL |
encoding | string | yes | 外部でパースされたエンティティの場合は、テキスト宣言の一部として このエンティティのエンコーディングを指定する属性。それ以外の 場合は NULL |
version | string | yes | 外部でパースされたエンティティの場合は、テキスト宣言の一部として このエンティティのバージョン番号を指定する属性。それ以外の場合は NULL |
DOMNode を継承します。
DOMEntityReference->__construct() - 新しい DOMEntityReference オブジェクトを作成する
DOMImplementation インターフェースは、個々の ドキュメントオブジェクトモデルのインスタンス独自の操作を行うための メソッド群を提供します。
DOMImplementation->__construct() - 新しい DOMImplementation オブジェクトを作成する
DOMImplementation->createDocument() - 指定した型とドキュメント要素の DOMDocument オブジェクトを作成する
DOMImplementation->createDocumentType() - 空の DOMDocumentType オブジェクトを作成する
DOMImplementation->hasFeature() - DOM implementation が、指定した機能を実装しているかどうかを調べる
DOMNode->appendChild() - 子要素群の最後に新しい子要素を追加する
DOMNode->cloneNode() - ノードを複製する
DOMNode->hasAttributes() - ノードが属性を保持しているかどうかを確かめる
DOMNode->hasChildNodes() - ノードが子を保持しているかどうかを調べる
DOMNode->insertBefore() - 参照しているノードの前に 新しい子を追加する
DOMNode->isSameNode() - 2 つのノードが等しいかどうかを調べる
DOMNode->isSupported() - 指定したバージョンで機能がサポートされているかどうかを調べる
DOMNode->lookupNamespaceURI() - プレフィックスに基づいて、ノードの名前空間 URI を返す
DOMNode->lookupPrefix() - 名前空間 URI に基づいて、ノードの名前空間プレフィックスを返す
DOMNode->normalize() - ノードを正規化する
DOMNode->removeChild() - 子要素群から子を削除する
DOMNode->replaceChild() - 子を置き換える
表 8.
名前 | 型 | 読み込み専用 | 説明 |
---|---|---|---|
nodeName | string | yes | 現在のノード型の正確な名前を返す |
nodeValue | string | no | その型に応じてノードの値を返す |
nodeType | int | yes | ノードの型を、定義済みの定数 XML_xxx_NODE のいずれかで返す |
parentNode | DOMNode | yes | このノードの親を返す |
childNodes | DOMNodeList | yes | このノードのすべての子を含む DOMNodeList。 子が存在しない場合は、空の DOMNodeList |
firstChild | DOMNode | yes | このノードの最初の子。存在しない場合は NULL を返す |
lastChild | DOMNode | yes | このノードの最後の子。存在しない場合は NULL を返す |
previousSibling | DOMNode | yes | このノードの直前のノード。存在しない場合は NULL を返す |
nextSibling | DOMNode | yes | このノードの直後のノード。存在しない場合は NULL を返す |
attributes | DOMNamedNodeMap | yes | このノードが DOMElement の場合は ノードの属性を含む DOMNamedNodeMap、 それ以外の場合は NULL |
ownerDocument | DOMDocument | yes | このノードに関連付けられている DOMDocument オブジェクト |
namespaceURI | string | yes | このノードの名前空間 URI。指定されていない場合は NULL |
prefix | string | no | このノードの名前空間プレフィックス。指定されていない場合は NULL |
localName | string | yes | このノードの名前のローカル部分を返す |
baseURI | string | yes | このノードの完全なベース URI。もし実装が完全な URL を できなかった場合は NULL |
textContent | string | no | このノードとその子孫ノードのテキストを返す |
DOMNode を継承します。
DOMProcessingInstruction->__construct() - 新しい DOMProcessingInstruction オブジェクトを作成する
DOMCharacterData を継承します。
DOMText->__construct() - 新しい DOMText オブジェクトを作成する
DOMText->isWhitespaceInElementContent() - このテキストノードが空白を含むかどうかを示す
DOMText->splitText() - 指定したオフセットでノードを 2 つに分割する
DOMXPath->__construct() - 新しい DOMXPath オブジェクトを作成する
DOMXPath->registerNamespace() - DOMXpath オブジェクトの名前空間を登録する
DOMXPath->evaluate() - XPath 式を評価し、結果を返す
DOMXPath->query() - XPath 式を評価する
このリファレンスの多くの例では XML ファイルを使用します。その際には、 以下のような形式の book.xml を使用します。
以下の定数が定義されています。 この関数の拡張モジュールが 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 のようなメソッドのコールによってノードの 「部分的な妥当性」が満たされなくなった際にこの例外が発生し、操作は 行われません。 |