About
<?php
require_once 'XML/Builder.php';
XML_Builder::factory()
->root
->hello_('world')
->_
->_echo;
|
<?xml version="1.0" encoding="UTF-8"?>
<root>
<hello>world</hello>
</root>
|
PHPでXMLを組み立てるためのライブラリです。
-
簡潔: とにかく短く書けます。
-
安全: DOMやXMLWriterといった実績のあるライブラリのラッパーとして動作します。そのためXSSのような不具合が原理的に発生しません。
-
DOMとXMLWriterをサポート: バックエンドとして、高機能なDOM・高速なXMLWriterのいずれかを選択できます。どちらを選んでも同じインターフェースで書けます。
-
Arrayサポート: おまけ機能として、同一インターフェースで配列を組み立てる機能があります。JSON/XML/PHPSerializeの出し分けが簡単に行えます。
Install
PEARパッケージ形式でOpenpearに登録してあるため、pearコマンドで簡単にインストールできます。
# pear channel-discover openpear.org
# pear install openpear/XML_Builder
pearコマンドが使えない環境では、githubからソースをダウンロードして、include_pathにlibの中身をコピーすればOK。
なお、このページ自体もXML_Builderを使って書いています。ソースはsrc/index.html.phpから参照できます。
XML_Builder::factory()
XML_Builderオブジェクトを生成します。引数は配列で渡します。
オプション説明
| オプション名 |
デフォルト |
説明 |
| class |
dom |
バックエンドを選択します。dom/xmlwriter/arrayのいずれかを指定します。 |
| formatOutput |
true |
出力を整形するかどうか |
| version |
1.0 |
出力するXMLのバージョン。<?xml version="1.0"?>のversionです。 |
| encoding |
UTF-8 |
出力するXMLの文字コード。<?xml version="1.0" encoding="UTF-8"?>のencodingです。 |
| doctype |
null |
DOCTYPE宣言。array('HTML',null,null)などのように3要素の配列で渡します。よく使いそうなHTML関係のものはXML_Builderクラスのstatic変数として定義してあります。 |
| writeto |
memory |
XMLWriter専用。XMLWriterが書きだす先を指定します。ファイル名を書けばそのファイルに直接書き込みますし、php://outputを指定すれば標準出力にどんどん書きだしていきます。 |
このXML_Builder::factory()でビルダーオブジェクトを作り、以下のメソッドをメソッドチェーンでつなげて書いていきます。
$builder = XML_Builder::factory(array(
'class' => 'dom',
'doctype' => XML_Builder::$HTML4_STRICT,
));
|
Methods
- 引数がない場合は()を省略することができます。
- 「xml」から始まる正式名と、「_」から始まる省略名があります。「xml~」の方がやや高速に動作します。
->xmlElem($name), ->$name
$nameという名前の要素を作成して現在編集中の要素に追加します。戻り値は作成した要素になります。
//以下はすべて同じ意味
->root
->root()
->xmlElem('root')
|
<root>
|
名前空間付きの要素や、記号を含む要素の場合は{'〜'}で囲う必要があります。
//以下はすべて同じ意味
->{'atom:feed'}
->{'atom:feed'}()
->xmlElem('atom:feed')
|
<atom:feed>
|
->xmlEnd(), ->_
現在の要素の編集を終え、親の要素に戻ります。
->xmlAttr(), ->_attr()
現在編集中の要素に属性を追加します。配列で渡します。
->root
->_attr(array('moge'=>'fuga','noge'=>'guga'))
->_
|
<root moge="fuga" noge="guga"/>
|
->xmlText(), ->_text()
現在編集中の要素にテキストノードを追加します。
->root
->_text('hogehoge')
->_
|
<root>hogehoge</root>
|
->$name_(array(), "string")
xmlElem(), xmlAttr(), xmlText(), xmlEnd()の組み合わせには省略記法が用意されています。
"_"で終わるように要素名を書くと、その要素の編集を終了します。->xmlEnd()をすぐに呼んだのと同じ効果です。
属性や単純なテキストノードであれば、要素の引数として渡すことでも追加できます。
//--同じ意味-----
->root
->_attr(array('aaa'=>'bbb'))
->_text('hogehoge')
->_
//--------
->root_(array('aaa'=>'bbb'), 'hogehoge')
//--混ざっていてもOK------
->root(array('aaa'=>'bbb'))
->_text('hogehoge')
->_
|
<root aaa="bbb">hogehoge</root>
|
XML_Builder_DOM
ここではDOMバックエンド特有の機能を紹介します。
Additional Properties
->xmlDom
XML_Builderによって構築されたDOMDocumentオブジェクトが格納されています。
Additional Methods
->xmlEcho($type="xml")
出力を行います。引数にhtmlという文字列を渡すと、DOMによるHTML出力を試みます。
XML_Builder_XMLWriter
ここではXMLWriterバックエンド特有の機能を紹介します。
Additional Properties
->xmlWriter
XMLWriterオブジェクトが格納されています。
XML_Builder_Array
ここではArrayバックエンド特有の機能を紹介します。
Additional Properties
->xmlArray
構築された入れ子の配列が格納されています。