|
|
前のページ 1 2
|
|
使用例(2)
|
|
DOMによるデータ追加
|
次にDOM APIの使用例を示します。PHP5のDOM APIでは、関数によるインターフェイスとオブジェクトインターフェイスの2種類のAPI(デュアルAPI)が用意されています。ここでは、オブジェクトAPIを使用してリスト1のXML文書にデータを追加する例を示します(リスト3)。
|
リスト3:DOMの例(dom.php) |
1 <?php
2 $dom = new domDocument;
3 $dom->load("sample.xml");
4 $root = $dom->documentElement;
5 $book = $root->appendChild (new domElement("book"));
6 $book->appendChild (new domElement("title", "PHP5徹底攻略:実戦編"));
7 $book->appendChild (new domElement("author", "廣川 類"));
8 print $dom->saveXML();
9 ?> |
リスト3のスクリプト(dom.php)のコードを見てみましょう。DOMを使用するには、まず、DOMオブジェクトのインスタンスを生成する必要があります(2行目)。次にloadメソッドにより既存のファイルからDOMツリーを生成します(3行目)。なお、ここではファイルからXMLデータを読み込んでいますが、PHPの変数に代入されたXMLデータからDOMツリーを生成することも可能です。
データを追加する際にはルートノードを取得した後、appendChildメソッドにより順次子ノードを追加していきます(4〜7行目)。
最後にsaveXMLメソッドによりXMLデータを出力します(8行目)。
リスト3のスクリプトにより出力されるXMLデータには、次の内容が追加されています。
|
<book>
<title>PHP5徹底攻略:実戦編</title>
<author>廣川 類</author>
</book> |
|
DOMによるデータ検証
|
XMLデータの再利用性を高めるためには、一定の規約の下にデータを記述すると同時に、そのデータが正しく記述されていることを検証する手段が必要となります。
PHP5のDOM APIでは、スキーマ言語に基づきXMLデータを検証する機能をサポートしています。スキーマ言語と一口に言ってもいくつか種類がありますが、DOM APIは、古くからあるDTD以外に、W3C標準のXML Schema、XML Schemaよりわかりやすいスキーマ言語として注目されているRelax NGをサポートしています。
ここでは、例としてリスト1に示したXML文書をリスト4に示すXML Schemaで検証することを考えます。
|
リスト4:XMLSchemaファイル(sample.xsd) |
<?xml version="1.0"?>
<xsd:schema xmlns:xsd= "http://www.w3.org/2001/XMLSchema">
<xsd:element name="books" type="booklist"/>
<xsd:complexType name="booklist">
<xsd:sequence>
<xsd:element name="book" type="bookdata" maxOccurs= "unbounded" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookdata">
<xsd:all>
<xsd:element name= "title" type="xsd:string"/>
<xsd:element name= "author" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:schema>
|
XML Schemaに基づき検証を行うスクリプトをリスト5に示します。
|
リスト5:検証用スクリプト(validate.php)
|
1 <?php
2 $dom = new domDocument;
3 $dom->load("sample.xml");
4 if ($dom->schemaValidate ('sample.xsd')) {
5 print "valid";
6 } else {
7 print "invalid";
8 }
9 ?> |
検証は、スキーマファイルを引数に指定してschemaValidateメソッドをコールすることにより行います(4行目)。
このスクリプトを実行すると、リスト1のXML文書が検証されます。この例の場合、リスト1の文書がリスト4のスキーマに基づき正しく記述されているため、「valid」と表示されます。
なお、DTDおよびRelax NGによる検証を行う場合は、それぞれvalidate()メソッド、relaxNGValidate()メソッドを使用します。
|
前のページ 1 2
|
|
|
|
著者プロフィール
著者:廣川 類
PHPと出会ってから早9年が過ぎ、常に進化し続けるその姿を日々楽しんでいる。PHPコミュニティ活動にかけられる時間が年々減ってきているのが気がかり。
|
|
|
|