<< PHP4がPHP5になる!? | main | Pear XML_SerializerでXML生成 >>

2007.08.03 Friday

XMLを出力

このブログでは、RSSのパースやsimplexmlを使ったXMLのパース、PearのServices_JSONを使ったJSONのパースなど、データ解析の記事は多いのですが、個人的にあまり使用していないこともあって、データ生成についての記事は、ほとんどありません。

気が向いたので、XMLの出力方法についてまとめてみました。

--

--

ここでは、前提として、PHP5以上、simplexmlモジュール導入済み、で話を進めていきます。
どうしても、この環境が用意できない場合は、PEARのXML_Serializerを導入すれば、ほぼ同じことが出来ますので、ご覧になってみるとよいと思います。

■simplexmlについて
simplexmlというと、simplexml_load_file,simplexml_load_stringだけに目が行きがちなのですが、実は、クラス実装されていて、名前のとおりシンプルながら、基本的なXML生成が簡単に行えるようになっています。
SimpleXML関数の日本語マニュアル

■XMLを出力 では、simplexmlを使って、実際の出力例を見てみましょう。 ここでは、 <items><new1>value1</new1></items> というXML出力をしてみます。 ソースは、
$xml_template = "<items></items>";
$xml = simplexml_load_string($xml_template);
$xml->addChild('new1','value1');
print htmlspecialchars($xml->asXml()) . '<br>';
この出力結果は、
<?xml version="1.0"?> <items><new1>value1</new1></items>
となり、希望のXML出力が得られることが分かります。 ソース解説は・・・特にないですね。それくらい簡単に扱えます。 あえていうならば、asXMLをコールすることで、XML1.0のヘッダを付加して、XML形式の文字列で出力しています、といったところでしょうか。 ちなみに、この出力結果をsimplexml_load_stringに渡してパースすると、
SimpleXMLElement Object
(
    [new1] => value1
)
と、ちゃんとパース出来ます。(当然ですが)

ここでは使用していませんが、addChildでは、namespaceも指定できるので、必要に応じて付加してもよいでしょう。

以下、追記
■日本語がダメだ・・・
日本語を含むXMLデータを上記の方法で作成し、asXMLの引数に書き込みファイルを指定すると、生成されたファイルには数値化された文字列が・・・
値を見る限り、エンティティ変換されちゃってますね。
読み込みは行えるのだが、これじゃ可読性が著しく悪いので、実用にはならないですね。
asXML()の仕様が、こうなっているんで、どうにもならない。
ダメだ、こりゃ。
他の方法を探すしかないのか。いまさら、DOMってのもアレだし、PEARのライブラリかな。
解決方法をご存知の方いましたら、教えていただけると幸いです。

--

テクノラティお気に入りに追加する

Comments

コメント入力は停止しています

海外からと思われるコメントスパムが横行しているため、全記事のコメント入力を停止しています。メッセージのある方は、ホームページの一番下に連絡欄がありますので、そちらからお願いします。

Trackback URL

トラックバックする場合は、
トラックバック元の記事にこのエントリへのリンクを記載してください
このエントリのタイトル「XMLを出力」
このエントリのリンク「http://kommy.s254.xrea.com/blog/log/eid51.html」