とあるお仕事でXMLを扱うことになって、simplexmlを使っているのだが、使っていて思ったことをいくつか。
クライアントからいただいたファイルをみてちょっと唖然。XML自体は構造もしっかりしているのだが、タグは全て日本語。これはすごく萎えた。日本人だから・・・しょうがないんだよね。でも、これっていろんなソフトで加工するときに障害にならないのか不安に思えた。そして萎えたことがもう一つ。文字コードシフトJISじゃんかー。これも、まぁ、日本人だから・・・しょうがないんだよね。
ということでシフトJISでマルチバイトなタグで構成されたXMLファイルがsimplexmlで扱えるのか試してみた。結果からいうと「すごい!」「使える!」。まず普通にsimplexml_load_fileとかして、var_dumpしてみた。ちゃんと全部オブジェクトに格納されている!。と、ひとまず感動した。
そして文字コードはというと、UTF-8に変換されて格納されている!。扱いやすい!。XMLファイルの先頭に文字コードの宣言(もちろんShift_JISと指定)がされているのだが、ここを判断して(もしくは文字コード自動判別で)、変換されているんだろう。「自動」というのはいささか怖い気もするが、それでもまぁ満足がいく。
さて、各タグにアクセスできるかどうか、だがこれもOK。以下のように記述して、アクセスすることができた。
$xmlObj->{‘日本語のタグ名’}
正直ほっとした。シフトJISでマルチバイトなタグのXMLを見たときはどうなることかと思ったが何とかなりそうだ。
1点気づいたことがあった。いったんsimplexml_load_fileして、再度asXML()でXMLを吐き出すときにXML宣言がなくなっちゃってしまったことだ。これはそういう仕様なんだろうか。そもそもXML宣言部分は、XML本体とは別物という扱いなんだろうか。ここを再現することはできないんだろうか。
まぁ、かっこいいプログラムである必要はない。要求どおりに動いてくれさえすればいいので、XML宣言は後付することにする。何はともあれいろいろ発見できた一日だった。