PHP マニュアル
前のページ |  | 次のページ

# 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->__construct() - 新しい DOMAttr オブジェクトを作成する

### メソッド

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

### プロパティ

表 1.

名前 | 型 | 読み込み専用 | 説明
--- | --- | --- | ---
name | string | yes | 属性の名前
ownerElement | DOMElement | yes | 属性を保持する要素
schemaTypeInfo | bool | yes | 未実装です。常に `NULL` を返します。
specified | bool | yes | 未実装です。常に `NULL` を返します。
value | string | no | 属性の値

## DOMCharacterData

DOMNode を継承します。

### メソッド

- DOMCharacterData->appendData() - ノードの文字データの最後に文字列を追加する

- DOMCharacterData->deleteData() - 指定した範囲の文字列をノードから削除する

- DOMCharacterData->insertData() - 指定した 16 ビット単位のオフセットに、文字列を挿入する

- DOMCharacterData->replaceData() - DOMCharacterData ノードの文字列の一部を置換する

- DOMCharacterData->substringData() - ノードから指定した範囲のデータを抽出する

### プロパティ

表 2.

名前 | 型 | 読み込み専用 | 説明
--- | --- | --- | ---
data | string | no | ノードの内容
length | int | yes | 内容の長さ

## DOMComment

DOMCharacterData を継承します。

### コンストラクタ

- DOMComment->__construct() - 新しい DOMComment オブジェクトを作成する

## DOMDocument

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->normalizeDocument() - ドキュメントを正規化する

- DOMDocument->relaxNGValidate() - ドキュメントを relaxNG で検証する

- DOMDocument->relaxNGValidateSource() - ドキュメントを relaxNG で検証する

- DOMDocument->registerNodeClass() - 基底ノード型の作成に使用する拡張クラスを登録する (DOM 標準ではありません)

- 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"

## DOMDocumentFragment

DOMNode を継承します。

### メソッド

- DOMDocumentFragment->appendXML() - 生の XML データを追加する (DOM 標準ではありません)

## DOMDocumentType

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 となる。区切りの角括弧は含まない。

## DOMElement

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() - 新しい属性を追加する

- DOMElement->setIdAttribute() - ID 属性を宣言する

- DOMElement->setIdAttributeNode() - ID 属性を宣言する

- DOMElement->setIdAttributeNS() - ID 属性を宣言する

### プロパティ

表 5.

名前 | 型 | 読み込み専用 | 説明
--- | --- | --- | ---
schemaTypeInfo | bool | yes | 未実装。常に `NULL` を返す。
tagName | string | yes | 要素名

## DOMEntity

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`

## DOMEntityReference

DOMNode を継承します。

### コンストラクタ

- DOMEntityReference->__construct() - 新しい DOMEntityReference オブジェクトを作成する

## DOMException

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

第20章 も参照ください。

### プロパティ

表 7.

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

## DOMImplementation

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

### コンストラクタ

- DOMImplementation->__construct() - 新しい DOMImplementation オブジェクトを作成する

### メソッド

- DOMImplementation->createDocument() - 指定した型とドキュメント要素の DOMDocument オブジェクトを作成する

- DOMImplementation->createDocumentType() - 空の DOMDocumentType オブジェクトを作成する

- DOMImplementation->hasFeature() - DOM implementation が、指定した機能を実装しているかどうかを調べる

## DOMNode

### メソッド

- DOMNode->appendChild() - 子要素群の最後に新しい子要素を追加する

- DOMNode->cloneNode() - ノードを複製する

- DOMNode->hasAttributes() - ノードが属性を保持しているかどうかを確かめる

- DOMNode->hasChildNodes() - ノードが子を保持しているかどうかを調べる

- DOMNode->insertBefore() - 参照しているノードの前に 新しい子を追加する

- DOMNode->isDefaultNamespace() - 指定した名前空間 URI がデフォルトの名前空間かどうかを調べる

- 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 | このノードとその子孫ノードのテキストを返す

## DOMNodeList

### メソッド

- DOMNodelist->item() - インデックスで指定したノードを取得する

### プロパティ

表 9.

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

## DOMNotation

DOMNode を継承します。

### プロパティ

表 10.

名前 | 型 | 読み込み専用 | 説明
--- | --- | --- | ---
publicId | string | yes |
systemId | string | yes |

## DOMProcessingInstruction

DOMNode を継承します。

### コンストラクタ

- DOMProcessingInstruction->__construct() - 新しい DOMProcessingInstruction オブジェクトを作成する

### プロパティ

表 11.

名前 | 型 | 読み込み専用 | 説明
--- | --- | --- | ---
target | string | yes |
data | string | no |

## DOMText

DOMCharacterData を継承します。

### コンストラクタ

- DOMText->__construct() - 新しい DOMText オブジェクトを作成する

### メソッド

- DOMText->isWhitespaceInElementContent() - このテキストノードが空白を含むかどうかを示す

- DOMText->splitText() - 指定したオフセットでノードを 2 つに分割する

### プロパティ

表 12.

名前 | 型 | 読み込み専用 | 説明
--- | --- | --- | ---
wholeText | string | yes |

## DOMXPath

### コンストラクタ

- DOMXPath->__construct() - 新しい DOMXPath オブジェクトを作成する

### メソッド

- DOMXPath->registerNamespace() - DOMXpath オブジェクトの名前空間を登録する

- DOMXPath->evaluate() - XPath 式を評価し、結果を返す

- DOMXPath->query() - XPath 式を評価する

### プロパティ

表 13.

名前 | 型 | 読み込み専用 | 説明
--- | --- | --- | ---
document | DOMDocument |  |

# 例

このリファレンスの多くの例では 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 のようなメソッドのコールによってノードの 「部分的な妥当性」が満たされなくなった際にこの例外が発生し、操作は 行われません。

前のページ | ホーム | 次のページ
scandir | 上に戻る | DOMAttr->__construct()