XMLは厳密な文法にそって書かれています。
XML文章はPHP等のプログラミング言語で取り扱いやすいものです。
XMLを定型的に利用するには、いくつかの仕様が決まっています。
XMLを利用する仕様の1つである
DOM(Document Object Model)について書いていきます。
DOMは、
XML文書を木構造とみなして分析して、
木構造のノードを操作する
という方法でXML文書を扱う形です。
木のそれぞれの節目は、ノード(node:節)といいます。
XML文書中の要素や属性、テキストなどが、DOMの「ノード」に当たります。
DOMでXML文書を作成
木構造のXML文章を組み立ててみる
ということをやってみます。
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title>DOMでXML文書を作ってみる</title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php //木構造の文章を作成 $doc = new DOMDocument; //ルート要素を作成 $root = $doc->createElement("food"); //ルート要素を作成 $doc->appendChild($root); //要素を作成 $elm[0] = $doc->createElement("fruit"); //ルート要素に追加 $root->appendChild($elm[0]); //テキスト作成 $txt[0] = $doc->createTextNode("apple"); //要素に追加 $elm[0]->appendChild($txt[0]); //要素を作成 $elm[1] = $doc->createElement("fruit"); //ルート要素に追加 $root->appendChild($elm[1]); //テキスト作成 $txt[1] = $doc->createTextNode("orange"); //要素に追加 $elm[1]->appendChild($txt[1]); //XML文書に追加 echo $doc->saveXML(); ?> </body> </html> |
上記のコードを実行して、ChromeだとF12ボタンをしたり、ソースコードを
確認すると、以下のようになっているのが確認できます。
クラス | メソッド | 説明 |
---|---|---|
DOMDocument | DOMElement createElement(string $tagName) | 文書の「要素」を作成 |
DOMDocument | DOMText createTextNode(stirng $data) | 文書の「テキスト」を作成 |
DOMNode | DOMNode appendChild(DOMNode $newChild) | ノードに子を追加 |
DOMでXMLファイルを読み込んでみる
DOMでは、読み込んだデータを取り出すことができます。
要素を取り出すには、色々な方法がありますが、
今回は以下のclassのメソッドを使ってやります。
クラス | メソッド | 説明 |
---|---|---|
DOMDocument | NodeList getElementByTagName(string $tagName) | 文書から「ノードリスト」(要素のリスト)を得る |
DOMNodelist | DOMNode item(integer $index) | ノードリストから「ノード」を得る |
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title>XMLファイルを読み込む</title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php //木構造の文書を作成 $doc = new DOMDocument; //XML文書を読み込む $doc->load("test.xml"); //タグ名を調べてノードのリストを抽出 $list = $doc->getElementsByTagName("name"); for( $i=0 ; $i < $list->length; $i++ ){ //ノードを取り出す $node = $list->item($i); //ノードの値を参照して、出力 echo $node->nodeValue . "<br>"; } ?> </body> </html> |
getElementsByTagName()メソッドは、引数の名前のタグを
もつノードのリストを取り出す処理を行います。今回は「name」という
名前を持つノードのリストを取得します。
ノードのりすとからitem()でノードを1つずつ
取り出すことができます。ノードの数は、lengthメンバ変数を
参照すればわかります。ノードの値は、nodeValueメンバ変数に
格納されています。