2015年10月11日日曜日

PHP4でsimplexml_load_file()と同等の機能を実装

  • このエントリーをはてなブックマークに追加


最近、仕事でXMLファイルを加工するPHPスクリプトを書いています。テスト環境で、PHP5でしたので、simplexml_load_file()を使って、ファイルをロードし、XML各要素の値を出しています。
こちらsimplexml_load_fileの紹介をご参照ください。
基本的な SimpleXML の使用法 ¶


しかし、本番環境に持って行ったら、なんとPHPのバージョンは4点台だった。参りましたね。スクリプトを書く前にきちんと本番環境を確認しないと、実感しました。

で、PHPのバージョンも上げるのかありだが、それはちょっと影響範囲が大きいため、諦めた。そして、simplexml_load_file()のような機能がPHP4であるかどうか調べたら、ありましたよ。助かりました。

Implementation of simplexml_load_file() in PHP4

miniXMLというライブラリを使えば実現できます。
miniXMLはこちらからダウンロードしてください。
http://sourceforge.net/projects/minixml/


自分で簡単にサンプルコードも作ってみました。
======================================================
<?php
/* xml sample file
<?xml version='1.0' standalone='yes'?>
<movies>
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Ms. Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&#211;r</actor>
   </character>
  </characters>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <great-lines>
   <line>PHP solves all my web problems</line>
  </great-lines>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
</movies>
*/

require_once(".\minixml-1.3.8\minixml.inc.php");
$xml = new MiniXMLDoc();
$xml->fromFile('.\movies.xml');
$rootElement = & $xml->getRoot();

$movie = $rootElement->getElementByPath('movie');
$title = $rootElement->getElementByPath('movie/title')->getValue();
echo "$title\n";

$characters = $movie->getElementByPath('characters');
$characters_all = $characters->getAllChildren('character');
foreach($characters_all as $c){
  $name = $c->getElementByPath('name')->getValue();
  $actor = $c->getElementByPath('actor')->getValue();
  echo "$name,$actor\n";
}

$plot = $movie->getElementByPath('plot')->getValue();
echo "$plot\n";

$greatlines = $movie->getElementByPath('great-lines');
$greatlines_all = $greatlines->getAllChildren('line');
foreach($greatlines_all as $l){
  $greatline = $l->getValue();
  echo "$greatline\n";
}

$ratings = $movie->getAllChildren('rating');
foreach ($ratings as $r){
  $type = $r->xattributes['type'];
  $rating = $r->getValue();
  echo "$type,$rating\n";
}
?>
======================================================


実行結果は下記の通りです。
c:\php>php parsexml.php
PHP: Behind the Parser
Ms. Coder,Onlivia Actora
Mr. Coder,El ActÓr
So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
PHP solves all my web problems
thumbs,7
stars,5

XMLの要素を全部出力できました。



この記事がお役にたちましたらシェアをお願いします:)

  • このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿