XML操作DOM関数1
- 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データを追加する〕
DOMAttr::__construct
新しいDOMAttrオブジェクトを作成する
unknown
新しいDOMAttrオブジェクトを作成します。 このオブジェクトは読込専用です。 このオブジェクトはドキュメントに追加することはできますが、さらに追加のノードを付け加えるにはノードをドキュメントと関連付ける必要があります。 書き込み可能なノードを作成するには、DOMDocument::createAttributeを使用します。
<?
# 新しいDOMAttrを作成する
$dom = new DOMDocument('1.0', 'UTF-8');
$element = $dom->appendChild(new DOMElement('root'));
$attr = $element->setAttributeNode(new DOMAttr('attr', 'attrvalue'));
echo $dom->saveXML();
/*
<?xml version="1.0" encoding="UTF-8"?>
<root attr="attrvalue"/>
*/
?>
DOMAttr::isID
属性が定義済みのIDかどうかを調べる
unknown
属性が定義済みのIDかどうかを調べます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
この関数を使用する前に、DOMDocument::validateあるいはDOMDocument::validateOnParseを使用してドキュメントを検証する必要があります。
<?
$doc=new DomDocument;
# id を参照する前に、ドキュメントを検証する
$doc->validateOnParse=true;
$doc->Load('/content/demo/book.xml');
# book要素からid属性を取得する
$attr=$doc->getElementsByTagName('book')->item(0)->getAttributeNode('id');
var_dump($attr->isId()); // bool(true)
?>
DOMCharacterData::appendData
ノードの文字データの最後に文字列を追加する
unknown
ノードの文字データの最後に指定した文字列を追加します。 返り値はありません。
DOMCharacterData::deleteData
指定した範囲の文字列をノードから削除する
unknown
削除開始位置から削除する文字数分の文字列をノードから削除します。 削除開始位置と削除する文字数の合計が文字列の長さより大きい場合は、文字列の末尾まで削除されます。 返り値はありません。 削除開始位置が負の値、あるいは16ビット単位のデータ長より大きい場合、または削除する文字数が負の値の場合にDOM_INDEX_SIZE_ERRが発生します。
DOMCharacterData::insertData
指定した 16 ビット単位のオフセットに、文字列を挿入する
unknown
指定した16ビット単位のオフセットに文字列を挿入します。 第1引数オフセットには、挿入する場所の文字オフセットを指定します。 返り値はありません。 オフセットが負の値、あるいは16ビット単位のデータ長より大きい場合にDOM_INDEX_SIZE_ERRが発生します。
DOMCharacterData::replaceData
DOMCharacterData ノードの文字列の一部を置換する
unknown
置換開始位置から置換文字数分の文字列を置換文字列に置換します。 置換開始位置と置換文字数の合計が文字列の長さより大きい場合は、文字列の末尾まで置換されます。 返り値はありません。 オフセットが負の値、あるいは16ビット単位のデータ長より大きい場合、または置換文字数が負の場合に、にDOM_INDEX_SIZE_ERRが発生します。
DOMCharacterData::substringData
ノードから指定した範囲のデータを抽出する
unknown
ノードから抽出開始位置から抽出文字数分のデータを抽出して返します。 抽出開始位置と抽出文字数の合計が文字列の長さより大きい場合は、文字列の末尾まで返されます。 抽出開始位置が負の値、あるいは16ビット単位のデータ長より大きい場合、または抽出文字数が負の場合に、にDOM_INDEX_SIZE_ERRが発生します。
DOMDocument::__construct
新しい DOMDocument オブジェクトを作成する
unknown
新しいDOMDocumentオブジェクトを作成します。 オプションの第1引数バージョンには、XML宣言のドキュメントのバージョン番号を指定します。 オプションの第2引数エンコーディングには、XML宣言のドキュメントのエンコーディングを指定します。
<?
# 新しい DOMDocument を作成する
$dom = new DOMDocument('1.0', 'utf-8');
echo $dom->saveXML();
/*
<?xml version="1.0" encoding="utf-8"?>
*/
?>
DOMDocument::createAttribute
新しい属性を作成する
unknown
DOMAttrクラスの新しいインスタンスを作成して返します。 エラーが発生した場合はFALSEを返します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。 属性名が無効な文字列を含んでいる場合は、DOM_INVALID_CHARACTER_ERRが発生します。
<?
$doc=new DOMDocument('1.0', 'UTF-8');
$root=$doc->createElement('songs');
$doc->appendChild($root);
for($i=0;$i<10;$i++){
$root_child=$doc->createElement('song');
$root->appendChild($root_child);
# 新しい属性を作成する
$root_attr1=$doc->createAttribute('url');
$root_child->appendChild($root_attr1);
$root_text=$doc->createTextNode('This is the root element!');
$root_attr1->appendChild($root_text);
# 新しい属性を作成する
$root_attr2= $doc->createAttribute('artist');
$root_child->appendChild($root_attr2);
$root_text=$doc->createTextNode('This is the root element!');
$root_attr2->appendChild($root_text);
# 新しい属性を作成する
$root_attr3=$doc->createAttribute('track');
$root_child->appendChild($root_attr3);
$root_text=$doc->createTextNode('This is the root element!');
$root_attr3->appendChild($root_text);
}
# 体裁を整える
$doc->formatOutput=true;
# 出力
print $doc->saveXML();
/*
<?xml version="1.0" encoding="UTF-8"?>
<songs>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
<song url="This is the root element!" artist="This is the root element!" track="This is the root element!"/>
</songs>
*/
?>
DOMDocument::createAttributeNS
関連付けられた名前空間に新しい属性を作成する
unknown
DOMAttrクラスの新しいインスタンスを作成して返します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。
第2引数qualifiedNameには、属性のタグ名とプレフィックスを「prefix:tagname」形式で指定します。
エラーが発生した場合はFALSEを返します。 qualifiedNameが無効な文字列を含んでいる場合は、 DOM_INVALID_CHARACTER_ERRが発生します。 qualifiedNameが不正な形式である場合、 qualifiedNameがプレフィックスを含んでいるにもかかわらず名前空間URIがNULLの場合にDOM_NAMESPACE_ERRが発生します。
DOMDocument::createCDATASection
新しい cdata ノードを作成する
unknown
DOMCDATASectionクラスの新しいインスタンスを作成して返します。 エラーが発生した場合はFALSEを返します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。
DOMDocument::createComment
新しい comment ノードを作成する
unknown
DOMCommentクラスの新しいインスタンスを作成を作成して返します。 エラーが発生した場合はFALSEを返します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。
DOMDocument::createDocumentFragment
新しい文書片を作成する
unknown
DOMDocumentFragmentクラスの新しいインスタンスを作成して返します。 エラーが発生した場合はFALSEを返します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。
DOMDocument::createElement
新しい要素ノードを作成する
unknown
DOMElementクラスの新しいインスタンスを作成して返します。 エラーが発生した場合はFALSEを返します。 要素名が無効な文字を含んでいる場合には、DOM_INVALID_CHARACTER_ERRが発生します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。
第1引数要素名には要素のタグ名を指定します。
第2引数要素の値を省略した場合は、空の要素が作成されます。 後から,DOMElement->nodeValueで値を設定することも可能です。
<?
# 新しい要素を作成し、ルートとして挿入するs
$dom=new DOMDocument('1.0', 'utf-8');
$element=$dom->createElement('test', 'This is the root element!');
#新しい要素をルート (ドキュメントの子要素) として挿入する
$dom->appendChild($element);
echo $dom->saveXML();
/*
<?xml version="1.0" encoding="utf-8"?>
<test>This is the root element!</test>
*/
?>
DOMDocument::createElementNS
関連付けられた名前空間に新しい要素を作成する
unknown
関連付けられた名前空間に新しい要素を作成して返します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。
第2引数qualifiedNameには、要素名を「prefix:tagname」形式で指定します。
オプションの第3引数値には、要素の値を指定します。 省略した場合は、空の要素が作成されます。 後から,DOMElement->nodeValueで値を設定することも可能です。
エラーが発生した場合はFALSEを返します。 qualifiedNameが無効な文字列を含んでいる場合は、 DOM_INVALID_CHARACTER_ERRが発生します。 qualifiedNameが無効な名前である場合に DOM_NAMESPACE_ERRが発生します。
<?
# 新しい要素を作成し、ルートとして挿入する
$dom=new DOMDocument('1.0', 'utf-8');
$element=$dom->createElementNS('http://www.example.com/XFoo', 'xfoo:test', 'This is the root element!');
# 新しい要素をルート (ドキュメントの子要素) として挿入する
$dom->appendChild($element);
echo $dom->saveXML();
/*
<?xml version="1.0" encoding="utf-8"?>
<xfoo:test xmlns:xfoo="http://www.example.com/XFoo">This is the root element!</xfoo:test>
*/
?>
DOMDocument::createEntityReference
新しいエンティティ参照ノードを作成する
unknown
DOMEntityReferenceクラスの新しいインスタンスを作成して返します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。
第1引数名前には、エンティティ参照の内容(エンティティ参照から先頭の&と末尾の;を取り除いたもの)を指定します。
エラーが発生した場合はFALSEを返します。 名前が無効な文字列を含んでいる場合は、 DOM_INVALID_CHARACTER_ERRが発生します。
DOMDocument::createProcessingInstruction
新しい PI ノードを作成する
unknown
DOMProcessingInstructionクラスの新しいインスタンスを作成して返します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。
エラーが発生した場合はFALSEを返します。 処理命令の対象が無効な文字列を含んでいる場合は、 DOM_INVALID_CHARACTER_ERRが発生します。
<?
$xml = new DOMDocument( "1.0", "utf-8" );
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;
$xslt = $xml->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="base.xsl"');
$xml->appendChild($xslt);
$root = $xml->createElement("list");
$node = $xml->createElement("contact", "John Doe");
$root-> appendChild($node);
$xml-> appendChild($root);
echo $xml->saveXML();
/*
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="base.xsl"?>
<list>
<contact>John Doe</contact>
</list>
*/
?>
DOMDocument::createTextNode
新しいテキストノードを作成する
unknown
DOMTextクラスの新しいインスタンスを作成して返します。 このノードは例えば、DOMNode->appendChild()などを使用して挿入されない限りドキュメント内には現れません。 エラーが発生した場合はFALSEを返します。
<?
$xml = new DOMDocument('1.0');
$dom = $xml->appendChild(new domelement('log'));
$dom->setAttribute('class','something');
$dom->appendChild($xml->createTextNode('something'));
echo $xml->saveXML();
/*
<?xml version="1.0"?>
<log class="something">something</log>
*/
?>
DOMDocument::getElementById
id に対応する要素を検索する
unknown
指定した要素のIDに対応する要素を検索して返します。 見つからなかった場合は、NULLを返します。
DOMDocument::getElementsByTagNameと同じですが、指定した要素のID空要素を検索する点が異なります。 この関数を動作させるには、何らかのID属性をDOMElement::setIdAttributeで設定するか、あるいはDTDでID型の属性を定義する必要があります。 後者の場合は、DOMDocument::validateあるいはDOMDocument->validateOnParseを使用してドキュメントを検証する必要があります。
<?
$doc=new DomDocument;
# IDを参照する前に、ドキュメントを検証する
$doc->validateOnParse=true;
$doc->Load('/content/demo/book.xml');
echo "IDがbooksの要素は".$doc->getElementById('books')->tagName."です。";
//IDがbooksの要素はchapterです。
?>
DOMDocument::getElementsByTagName
指定したタグ名に対応するすべての要素を検索する
unknown
指定した要素名にマッチした要素を含むDOMNodeListクラスの新しいインスタンスを返します。
第1引数要素名には、要素のタグにマッチする名前を指定します。 「*」を指定すると、すべてのタグにマッチします。
<?
/* ▼Users.xml
<NewDataSet>
<dataUser>
<UserName>StudioAMK</UserName>
<Email>user1@mail.com</Email>
<DisplayName>StudioAMK.com</DisplayName>
</dataUser>
<dataUser>
<UserName>User2</UserName>
<Email>user2@mail.com</Email>
<DisplayName>UserTwo</DisplayName>
</dataUser>
</NewDataSet>
*/
$doc=new DOMDocument();
$doc->load( '/content/demo/users.xml' );
$dataset=$doc->getElementsByTagName( "dataUser" );
foreach( $dataset as $row )
{
$xmlUserNames=$row->getElementsByTagName( "UserName" );
$xmlUserName=$xmlUserNames->item(0)->nodeValue;
$xmlEmails=$row->getElementsByTagName( "Email" );
$xmlEmail=$xmlEmails->item(0)->nodeValue;
$xmlDisplayNames=$row->getElementsByTagName( "DisplayName" );
$xmlDisplayName=$xmlDisplayNames->item(0)->nodeValue;
echo "$xmlUserName - $xmlEmail - $xmlDisplayName\n";
}
/*
StudioAMK - user1@mail.com - StudioAMK.com
User2 - user2@mail.com - UserTwo
*/
?>
DOMDocument::getElementsByTagNameNS
指定した名前空間で、タグ名に対応するすべての要素を検索する
unknown
指定したローカル名および名前空間URIにマッチするすべての要素のDOMNodeListを返します。
第1引数名前空間URIには、条件にマッチする要素の名前空間URIを指定します。 「*」を指定すると、すべての名前空間にマッチします。
第1引数ローカル名には、条件にマッチする要素のローカル名を指定します。 「*」を指定すると、すべてのローカル名にマッチします。
<?
# すべての XInclude 要素を取得する
$xml = <<<EOD
<?xml version="1.0" ?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Books of the other guy..</title>
<para>
<xi:include href="book.xml">
<xi:fallback>
<error>xinclude: book.xml not found</error>
</xi:fallback>
</xi:include>
<include>
This is another namespace
</include>
</para>
</chapter>
EOD;
$dom = new DOMDocument;
# 上で定義した XML 文字列を読み込む
$dom->loadXML($xml);
foreach ($dom->getElementsByTagNameNS('http://www.w3.org/2001/XInclude', '*') as $element) {
echo 'local name: ', $element->localName, ', prefix: ', $element->prefix, "\n";
}
/*
local name: include, prefix: xi
local name: fallback, prefix: xi
*/
?>
DOMDocument::importNode
現在のドキュメントにノードをインポートする
unknown
インポートするノードのコピーを作成し、それを現在のドキュメントに関連付けます。
オプションの第2引数deepにTRUEを指定すると、このメソッドはインポートするノード以下のサブツリーも再帰的にインポートします。 ノードの属性をコピーするには、このdeepニTRUEを設定しておく必要があります。
返り値としてコピーされたノードを返します。 コピーに失敗した場合はFALSEを返します。 ノードがインポートできなかった場合には、DOMExceptionが無視されます。
<?
###### ノードをドキュメント間でコピー
$orgdoc = new DOMDocument;
$orgdoc->loadXML("<root><element><child>text in child</child></element></root>");
# 新しいドキュメントにインポートしたいノード
$node = $orgdoc->getElementsByTagName("element")->item(0);
# 新しいドキュメントを作成
$newdoc = new DOMDocument;
$newdoc->formatOutput = true;
# マークアップを追加
$newdoc->loadXML("<root><someelement>text in some element</someelement></root>");
echo "The 'new document' before copying nodes into it:\n";
echo $newdoc->saveXML();
# ノードとそのすべての子をドキュメントにインポート
$node = $newdoc->importNode($node, true);
# それから、それを "<root>" ノードに追加
$newdoc->documentElement->appendChild($node);
echo "\nThe 'new document' after copying the nodes into it:\n";
echo $newdoc->saveXML();
/*
The 'new document' before copying nodes into it:
<?xml version="1.0"?>
<root>
<someelement>text in some element</someelement>
</root>
The 'new document' after copying the nodes into it:
<?xml version="1.0"?>
<root>
<someelement>text in some element</someelement>
<element>
<child>text in child</child>
</element>
</root>
*/
?>
DOMDocument::load
ファイルから XML を読み込む
unknown
XMLドキュメントをファイル名に指定したファイルから読み込みます。
第1引数ファイル名にはXMLドキュメントへのパスを指定します。
オプションの第2引数オプションには、libxmlオプション定数をビットORで連結したものを指定します。 省略した場合はデフォルトの0が適用されます。
成功した場合にTRUE、失敗した場合にFALSEを返します。 静的にコールされた場合は、DOMDocumentを返し、E_STRICT警告が発生します。 ファイル名に空文字列を指定したり、中身が空のファイルを指定すると警告が発生します。 この警告はlibxmlが発するものではないため、libxmlのエラー処理関数では対応できません。
<?
###### ドキュメントの作成
$doc = new DOMDocument();
$doc->load('/content/demo/book.xml');
echo $doc->saveXML();
/*
<?xml version="1.0" encoding="utf-8"?>
<books title="PHP関連のおすすめ書籍">
<book date="20081031" price="1995">まるごとPHP! Vol.2</book>
<book date="20080918" price="2940">PHP×携帯サイト デベロッパーズバイブル</book>
<book date="20080618" price="2604">CakePHP ポケットリファレンス</book>
<book date="20080526" price="3570">初めてのPHP & MySQL 第2版</book>
<book date="20080125" price="2520">PHPライブラリコレクション</book>
</books>
*/
?>
DOMDocument::loadHTML
文字列から HTML を読み込む
unknown
HTML文字列に含まれるHTMLをパースします。 XMLを読み込む場合とは異なり、妥当なHTMLでなくても読み込むことができます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
HTML文字列に空文字列を指定すると警告が発生します。 この警告はlibxmlが発するものではないため、libxmlのエラー処理関数では対応できません。
推奨する方法ではありませんが、この関数を静的にコールするとDOMDocumentオブジェクトを読み込んで作成することができます。 この静的なコールは、読み込む前にDOMDocumentのプロパティを設定する必要がない場合などに使用します。 ただし、この関数を静的にコールするとE_STRICT警告が発生します。
<?
# ドキュメントを作成する
$doc = new DOMDocument();
$doc->loadHTML("<html><body>Test<br></body></html>");
echo $doc->saveHTML();
/*
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>Test<br>
</body></html>
*/
?>
DOMDocument::loadHTMLFile
ファイルから HTML を読み込む
unknown
ファイル名に指定したファイルから読み込んだHTMLドキュメントをパースします。 XMLを読み込む場合とは異なり、妥当なHTMLでなくても読み込むことができます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
ファイル名に空文字列を指定したり、中身が空のファイルを指定すると警告が発生します。 この警告はlibxmlが発するものではないため、libxmlのエラー処理関数では対応できません。
推奨する方法ではありませんが、この関数を静的にコールするとDOMDocumentオブジェクトを読み込んで作成することができます。 この静的なコールは、読み込む前にDOMDocumentのプロパティを設定する必要がない場合などに使用します。 ただし、この関数を静的にコールするとE_STRICT警告が発生します。
<?
# ファイルからHTMLを読み込む
$doc = new DOMDocument();
$doc->loadHTML("<html><body>Test<br></body></html>");
echo $doc->saveHTML();
?>
]
DOMDocument::loadXML
文字列から XML を読み込む
unknown
XMLドキュメントをXMLを含む文字列に指定した文字列から読み込みます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
オプションの第2引数オプションには、libxmlオプション定数をビットORで連結したものを指定します。 デフォルトは0です。
XMLを含む文字列に空文字列を指定すると警告が発生します。 この警告はlibxmlが発するものではないため、libxmlのエラー処理関数では対応できません。
推奨する方法ではありませんが、この関数を静的にコールするとDOMDocumentオブジェクトを読み込んで作成することができます。 この静的なコールは、読み込む前にDOMDocumentのプロパティを設定する必要がない場合などに使用します。 ただし、この関数を静的にコールするとE_STRICT警告が発生します。
<?
# ドキュメントを作成する
$doc = new DOMDocument();
$doc->loadXML('<root><node/></root>');
echo $doc->saveXML();
/*
<?xml version="1.0"?>
<root><node/></root>
*/
# LoadXMLの静的なコール
$doc = DOMDocument::loadXML('<root><node/></root>');
echo $doc->saveXML();
?>
DOMDocument::normalizeDocument
ドキュメントを正規化する
unknown
このメソッドはドキュメントを一度保存してから読み直したかのように動作し、ドキュメントを正規化された形式にします。 返り値はありません。
DOMDocument::registerNodeClass
基底ノード型を作成する際に使用する拡張クラスを登録する
unknown
このメソッドを使用すると、独自に拡張したDOMクラスを登録することができ、後でPHP DOM拡張モジュールとして使用することができます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数baseclassには、拡張したDOMクラスを指定します。
第2引数extendedclassには、拡張したクラス名を指定します。 NULLを指定すると、それまでbaseclassを拡張して作成したすべてのクラスが削除されます。
<?
# 新しいメソッドをDOMElementに追加し、コードを書きやすくする
class myElement extends DOMElement {
function appendElement($name) {
return $this->appendChild(new myElement($name));
}
}
class myDocument extends DOMDocument {
function setRoot($name) {
return $this->appendChild(new myElement($name));
}
}
$doc = new myDocument();
$doc->registerNodeClass('DOMElement', 'myElement');
# これ以降、他の要素への要素の追加が一回のメソッドコールでできるようになります
$root = $doc->setRoot('root');
$child = $root->appendElement('child');
$child->setAttribute('foo', 'bar');
echo $doc->saveXML();
/*
<?xml version="1.0"?>
<root><child foo="bar"/></root>
*/
?>
DOMDocument::relaxNGValidate
ドキュメントを relaxNG で検証する
unknown
指定したRNGスキーマに基づいてドキュメントをrelaxNGで検証します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
DOMDocument::relaxNGValidateSource
ドキュメントを relaxNG で検証する
unknown
指定したRNGスキーマを含む文字列に基づいて、ドキュメントをrelaxNGで検証します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
DOMDocument::save
内部の XML ツリーをファイルに出力する
unknown
保存されたXMLドキュメントへのパスに指定したDOMツリーからXMLドキュメントを生成し、書き込んだバイト数を返します。 エラーが発生した場合はFALSEを返します。 通常、この関数は、DOMドキュメントの新規作成後にコールされます。
オプションの第2引数オプションには追加オプションを指定します。 現在は、LIBXML_NOEMPTYTAG(空タグの拡張)のみサポートされています。
DOMDocument::saveHTML
内部のドキュメントを HTML 形式の文字列として出力する
unknown
DOM表現からHTMLドキュメントを作成し、作成したHTML形式の文字列を返します。 エラーが発生した場合はFALSEを返します。 通常、この関数は、DOMドキュメントの新規作成後にコールされます。
<?
# HTMLツリーを文字列に保存する
$doc = new DOMDocument('1.0', 'utf-8');
$root = $doc->createElement('html');
$root = $doc->appendChild($root);
$head = $doc->createElement('head');
$head = $root->appendChild($head);
$title = $doc->createElement('title');
$title = $head->appendChild($title);
$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);
echo $doc->saveHTML();
/*
<html><head><title>This is the title</title></head></html>
*/
?>
DOMDocument::saveHTMLFile
内部のドキュメントを HTML 形式でファイルに出力する
unknown
ファイル名に指定したファイルのDOM表現からHTMLドキュメントを作成し、書き込んだバイト数を返します。 エラーが発生した場合はFALSEを返します。 通常、この関数は、DOMドキュメントの新規作成後にコールされます。
<?
# HTMLツリーをファイルに保存する
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$root = $doc->createElement('html');
$root = $doc->appendChild($root);
$head = $doc->createElement('head');
$head = $root->appendChild($head);
$title = $doc->createElement('title');
$title = $head->appendChild($title);
$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);
echo 'Wrote: ' . $doc->saveHTMLFile("/content/demo/test.html") . ' bytes'; // Wrote: 129 bytes
?>
DOMDocument::saveXML
内部の XML ツリーを文字列として出力する
unknown
DOM表現からXMLドキュメントを作成し、作成したXMLを返します。 エラーが発生した場合はFALSEを返します。 ノードが別のドキュメントである場合に、 DOM_WRONG_DOCUMENT_ERRが発生します。 通常、この関数は、DOMドキュメントの新規作成後にコールされます。
オプションの第1引数ノードは、ドキュメント全体ではなく、XML宣言以外の特定のノードだけを出力したい場合に指定します。
オプションの第2引数オプションには、追加オプションを指定します。 現在は、LIBXML_NOEMPTYTAG(空タグの拡張)のみサポートされています。
<?
# DOM ツリーを文字列に保存する
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$root = $doc->createElement('book');
$root = $doc->appendChild($root);
$title = $doc->createElement('title');
$title = $root->appendChild($title);
$text = $doc->createTextNode('これはタイトルです');
$text = $title->appendChild($text);
echo "ドキュメント全体を保存します\n";
echo $doc->saveXML() . "\n";
/*
ドキュメント全体を保存します
<?xml version="1.0" encoding="utf-8"?>
<book>
<title>これはタイトルです</title>
</book>
*/
echo "タイトルの部分のみを保存します\n";
echo $doc->saveXML($title);
/*
タイトルの部分のみを保存します
<title>これはタイトルです</title>
*/
?>
DOMDocument::schemaValidate
スキーマに基づいてドキュメントを検証する
unknown
ファイル名に指定したスキーマファイルに基づいてドキュメントを検証します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
DOMDocument::schemaValidateSource
スキーマに基づいてドキュメントを検証する
unknown
指定したRNG スキーマを含む文字列に定義されているスキーマに基づいてドキュメントを検証します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
DOMDocument::validate
DTD に基づいてドキュメントを検証する
unknown
DTDに基づいてドキュメントを検証します。 DTDによる検証を行うには、DOMDocumentのvalidateOnParseプロパティを使用することも可能です。 成功した場合にTRUEを返します。 失敗した場合、ドキュメントにDTDが添付されていない場合にFALSEを返します。
<?
# DTD による検証
$dom = new DOMDocument;
$dom->Load('/content/demo/book.xml');
if($dom->validate()){
echo "このドキュメントは正常です!\n";
}
?>
DOMDocument::xinclude
DOMDocument オブジェクト内の XIncludes を置換する
unknown
このメソッドはDOMDocumentオブジェクト内のXIncludesを置換し、ドキュメント内のXIncludesの数を返します。
オプションの第1引数オプション(PHP v5.1.0およびLibxml v2.6.7以降)には、libxmlのパラメータを指定します。
インクルードされるXMLファイルにDTDが添付されている場合は、libxml2が自動的にエンティティを解決するため、このメソッドは予期せぬ結果を引き起こすことがあります。
<?php
$xml = <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Books of the other guy..</title>
<para>
<xi:include href="/content/demo/book.xml">
<xi:fallback>
<error>xinclude: book.xml not found</error>
</xi:fallback>
</xi:include>
</para>
</chapter>
EOD;
$dom = new DOMDocument;
// 見た目をきれいにします
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
// 上で定義した XML 文字列を読み込みます
$dom->loadXML($xml);
// xincludes を置換します
$dom->xinclude();
echo $dom->saveXML();
/*
<?xml version="1.0" encoding="utf-8"?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Books of the other guy..</title>
<para>
<books title="PHP関連のおすすめ書籍" xml:base="/content/demo/book.xml">
<book date="20081031" price="1995">まるごとPHP! Vol.2</book>
<book date="20080918" price="2940">PHP×携帯サイト デベロッパーズバイブル</book>
<book date="20080618" price="2604">CakePHP ポケットリファレンス</book>
<book date="20080526" price="3570">初めてのPHP & MySQL 第2版</book>
<book date="20080125" price="2520">PHPライブラリコレクション</book>
</books>
</para>
</chapter>
*/
?>
DOMDocumentFragment::appendXML
生のXMLデータを追加する
unknown
生のXMLデータをDOMDocumentFragmentに追加します。 このメソッドはDOMの標準にはありません。XML DocumentFragmentをDOMDocumentに簡単に追加できるように作成されたものです。 成功した場合にTRUE、失敗した場合にFALSEを返します。
DOMの標準に従いたい場合は、まずテンポラリのDOMDocumentをダミーのルートで作成し、追加するXMLのルートの子ノードを順にループする必要があります。
<?
# XML データのドキュメントへの追加
$doc = new DOMDocument();
$doc->loadXML("<root/>");
$f = $doc->createDocumentFragment();
$f->appendXML("<foo>text</foo><bar>text2</bar>");
$doc->documentElement->appendChild($f);
echo $doc->saveXML();
/*
<?xml version="1.0"?>
<root><foo>text</foo><bar>text2</bar></root>
*/
?>
DOMComment::__construct
新しいDOMCommentオブジェクトを作成する
unknown
新しいDOMCommentオブジェクトを作成します。 このオブジェクトは読み取り専用です。 このオブジェクトは、ノードがドキュメントと関連付けられるまではノードに追加することができません。 書き込み可能なノードを作成するには、DOMDocument::createCommentを使用してください。
<? # 新しい DOMComment を作成する $dom = new DOMDocument('1.0', 'utf-8'); $element = $dom->appendChild(new DOMElement('root')); $comment = $element->appendChild(new DOMComment('root comment')); echo $dom->saveXML(); /* <?xml version="1.0" encoding="utf-8"?> <root><!--root comment--></root> */ ?>