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