XML操作DOM関数3
- 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 オブジェクトを取得する〕
DOMNodelist::item
インデックスで指定したノードを取得する
unknown
DOMNodeListオブジェクト内のインデックス番目にあるノードを返します。 インデックスが不正な形式の場合はNULLを返します。
コレクション内のノードの数を知るには DOMNodeListオブジェクトのlengthプロパティを使用します。
<?
# テーブル内のすべての要素を取得する
$doc = new DOMDocument;
$doc->load('/content/demo/book.xml');
$items = $doc->getElementsByTagName('book');
for ($i = 0; $i < $items->length; $i++) {
echo $items->item($i)->nodeValue . "\n";
}
/*
foreach ($items as $item) {
echo $item->nodeValue . "\n";
}
*/
/*
まるごとPHP! Vol.2
PHP×携帯サイト デベロッパーズバイブル
CakePHP ポケットリファレンス
初めてのPHP & MySQL 第2版
PHPライブラリコレクション
*/
?>
DOMProcessingInstruction::__construct
新しい DOMProcessingInstruction オブジェクトを作成する
unknown
新しいDOMProcessingInstructionオブジェクトを作成します。 このオブジェクトは読み取り専用です。 このオブジェクトをドキュメントに追加することは可能ですが、ノードを新しいドキュメントに関連付けるまではこのノードに別のノードを追加することはできません。 書き込み可能なノードを作成するには、DOMDocument::createProcessingInstructionを使用してください。
第1引数名前には、処理命令のタグ名を指定します。
オプションの第2引数値には、処理命令野値を指定します。
<?
# 新しい DOMProcessingInstruction を作成する
$dom = new DOMDocument('1.0', 'utf-8');
$html = $dom->appendChild(new DOMElement('html'));
$body = $html->appendChild(new DOMElement('body'));
$pinode = new DOMProcessingInstruction('php', 'echo "Hello World"; ');
$body->appendChild($pinode);
echo $dom->saveXML();
/*
<?xml version="1.0" encoding="utf-8"?>
<html><body><?php echo "Hello World"; ?></body></html>
*/
?>
DOMText::__construct
新しい DOMText オブジェクトを作成する
unknown
新しいDOMTextオブジェクトを作成します。
オプションの第1引数値には、textノードの値を指定します。 省略した場合は空のtextノードが作成されます。
<?
# 新しい DOMText を作成する
$dom = new DOMDocument('1.0', 'utf-8');
$element = $dom->appendChild(new DOMElement('root'));
$text = $element->appendChild(new DOMText('root value'));
echo $dom->saveXML();
/*
<?xml version="1.0" encoding="utf-8"?>
<root>root value</root>
*/
?>
DOMText::isWhitespaceInElementContent
このテキストノードが空白を含むかどうかを示す
unknown
このテキストノードが空白かどうかを示します。 このテキストノードが要素の内容に空白を含むかどうかは、ドキュメントの読み込み時に決定されます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
DOMText::splitText
指定したオフセットでノードを 2 つに分割する
unknown
指定したオフセットでノードを2つに分割し、同じ型の新しいノードを返します。 オフセット以降の内容をデータとして保持します。 分割したノードのツリー内での位置関係は兄弟となります。
分割後、このノードはオフセット位置までの内容を保持するようになります。 元のノードが親ノードを保持している場合、新しいノードは元のノードの兄弟として元のノードの次の位置に挿入されます。 オフセットとこのノードの長さが等しい場合は、新しいノードにはデータが含まれません。
オフセットには、分割する位置を指定します(0始まり)。
DOMXPath::__construct
新しい DOMXPath オブジェクトを作成する
unknown
新しいDOMXPathオブジェクトを作成します。
第1引数docにはDOMXPathに関連づけられたDOMDocumentを指定します。
<?
// to retrieve selected html data, try these DomXPath examples:
$file = "index.html";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);
// example 1: for everything with an id
//$elements = $xpath->query("//*[@id]");
// example 2: for node data in a selected id
//$elements = $xpath->query("/html/body/div[@id='yourTagIdHere']");
// example 3: same as above with wildcard
$elements = $xpath->query("*/div[@id='header']");
if (!is_null($elements)) {
foreach ($elements as $element) {
echo "<br/>[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
if($node->nodeValue!="") echo $node->nodeValue."\n";
}
}
}
/*
<br/>[div]
div#herader/div.logo
860px
960px
印刷ページを表示
ブックマークに追加
div#herader/div.icons
*/
?>
DOMXPath::evaluate
与えられた XPath 式を評価し、可能であれば結果を返す
unknown
指定したXPath式を実行し、可能であれば型付けされた結果、あるいは指定されたXPath式にマッチするすべてのノードを含むDOMNodeListを返します。
オプションの第2引数コンテキストノードには、クエリを指定します。 相対XPathクエリを実行する場合に、基準ノードを指定することができます。 デフォルトは、root要素に対する相対パスです。
<?
###### 英悟の書籍の数を取得する
$doc = new DOMDocument;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
$tbody = $doc->getElementsByTagName('tbody')->item(0);
// tbody ノードを基準とした相対クエリとなります
$query = 'count(row/entry[. = "en"])';
$entries = $xpath->evaluate($query, $tbody);
echo "There are $entries english books\n";
// There are 2 english books
?>
DOMXPath::query
与えられた XPath 式を評価する
unknown
指定したXPath式を評価し、指定したXPath式にマッチするノードを含むDOMNodeListを返します。 ノードを返さない式の場合は、空のDOMNodeListを返します。
オプションの第2引数コンテキストノードには、クエリを指定します。 相対XPathクエリを実行する場合に、基準ノードを指定することができます。 デフォルトは、root要素に対する相対パスです。
<?
###### すべての英語の書籍を取得する
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->Load('book.xml');
$xpath = new DOMXPath($doc);
// root 要素から開始します
$query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';
$entries = $xpath->query($query);
foreach ($entries as $entry) {
echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
" by {$entry->previousSibling->nodeValue}\n";
}
/*
Found The Grapes of Wrath, by John Steinbeck
Found The Pearl, by John Steinbeck
*/
###### すべての英語の書籍を取得する(式を短くするため、contextnodeパラメータを使用)
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
$tbody = $doc->getElementsByTagName('tbody')->item(0);
// tbody ノードからの相対クエリです
$query = 'row/entry[. = "en"]';
$entries = $xpath->query($query, $tbody);
foreach ($entries as $entry) {
echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
" by {$entry->previousSibling->nodeValue}\n";
}
?>
DOMXPath::registerNamespace
DOMXPath オブジェクトの名前空間を登録する
unknown
DOMXPathオブジェクトに、名前空間URIおよびprefixを登録します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
now coding...
module/include/php/dom3/domxpath_registernamespace.inc
dom_import_simplexml
SimpleXMLElement オブジェクトから DOMElement オブジェクトを取得する
unknown
SimpleXMLクラスのノードを受け取り、それをDOMElementノードに変換して返します。 新しいオブジェクトは、DOMElementノードとして使用することができます。 エラーが発生した場合は、FALSEを返します。
<?
###### dom_import_simplexml() を用いて SimpleXML を DOM にインポートする
$sxe = simplexml_load_string('<books><book><title>blah</title></book></books>');
if ($sxe === false) {
echo 'ドキュメントのパース中にエラー';
exit;
}
$dom_sxe = dom_import_simplexml($sxe);
if (!$dom_sxe) {
echo 'XML の変換中にエラー';
exit;
}
$dom = new DOMDocument('1.0');
$dom_sxe = $dom->importNode($dom_sxe, true);
$dom_sxe = $dom->appendChild($dom_sxe);
echo $dom->saveXML();
/*
<?xml version="1.0"?>
<books><book><title>blah</title></book></books>
*/
?>