Most simple DSL for DOM / XMLWriter @ PHP
Download Source Code<?php require_once 'XML/Builder.php'; echo XML_Builder::factory() ->root ->hello_('world') ->_;
<?xml version="1.0" encoding="UTF-8"?> <root> <hello>world</hello> </root>
PHPでXMLを組み立てるためのライブラリです。
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オブジェクトを生成します。引数は配列で渡します。
name | default value | description |
---|---|---|
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を指定すれば標準出力にどんどん書きだしていきます。 |
serializer | var_export | Array専用。->_echoしたときに適用するcallbackを指定します。ex) json_encode, yaml_emit, XML_Builder::json, serialize |
このXML_Builder::factory()でビルダーオブジェクトを作り、以下のmethodをmethod chainでつなげて書いていきます。
$builder = XML_Builder::factory(array( 'class' => 'dom', 'doctype' => XML_Builder::$HTML4_STRICT, ));
$nameという名前の要素を作成して現在編集中の要素に追加します。戻り値は作成した要素になります。
//以下はすべて同じ意味 ->root ->root() ->xmlElem('root') |
<root> |
名前空間付きの要素や、記号を含む要素の場合は{'〜'}で囲う必要があります。
//以下はすべて同じ意味 ->{'atom:feed'} ->{'atom:feed'}() ->xmlElem('atom:feed') |
<atom:feed> |
現在の要素の編集を終え、親の要素に戻ります。
->root ->_ |
<root/> |
現在編集中の要素に属性を追加します。配列で渡します。
->root ->_attr(array('moge'=>'fuga','noge'=>'guga')) ->_ |
<root moge="fuga" noge="guga"/> |
現在編集中の要素にテキストノードを追加します。
->root ->_text('hogehoge') ->_ |
<root>hogehoge</root> |
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> |
ここではDOMバックエンド特有の機能を紹介します。
XML_Builderによって構築されたDOMDocumentオブジェクトが格納されています。
出力を行います。引数にhtmlという文字列を渡すと、DOMによるHTML出力を試みます。
ここではXMLWriterバックエンド特有の機能を紹介します。
XMLWriterオブジェクトが格納されています。
ここではArrayバックエンド特有の機能を紹介します。
構築された入れ子の配列が格納されています。