こちらに移動
http://dozo.matrix.jp/spl/simplexml
コンフィグファイル、各種Web Service(WEBサービス)、
通信プロトコルに至ってXMLが当たり前のように飛び交っている。
しかしPHPerな人は取り残され気味だ。
他のライトウェイト言語(Light Weight Language, Ruby, Pythonなど)に比べて、
PHPのXML対応は遅れを取っている。
PHPでXMLを取り扱おうとすると
(゜Д゜)メンドイ
になってしまうわけだが。
SimpleXMLを使うと非常に簡単にXMLを取り扱うことが出来る。
さらにXMLを展開後のオブジェクト群を取り扱いやすくするのが、
SimpleXMLIterator(SimpleXML イテレータ)だ。
まずはサンプルから
<?php $xml =<<<EOF <?xml version='1.0'?> <OperationRequest> <HTTPHeaders> <Header Name="UserAgent" Value="Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4"/> </HTTPHeaders> <RequestId>1YZ06151X1EVCNK1QTYC</RequestId> <Arguments> <Argument Name="AssociateTag" Value="hoge-22"/> <Argument Name="ItemPage" Value="6"/> <Argument Name="Keywords" Value="test"/> <Argument Name="ResponseGroup" Value="Medium"/> <Argument Name="Operation" Value="ItemSearch"/> <Argument Name="Service" Value="AWSECommerceService"/> <Argument Name="AWSAccessKeyId" Value="hogehoge"/> <Argument Name="SearchIndex" Value="Blended"/> </Arguments> <RequestProcessingTime>0.109647989273071</RequestProcessingTime> </OperationRequest> EOF; $sxe = simplexml_load_string($xml, 'SimpleXMLIterator'); for ($sxe->rewind(); $sxe->valid(); $sxe->next()) { echo "key: ".$sxe->key()."<br />\n"; echo "value: ".print_r( $sxe->current(), true )."<br />\n"; } ?>
SimpleXMLIterator::current -- (mixed)現在のオブジェクトを返す SimpleXMLIterator::getChildren -- (mixed)現在の子オブジェクトを返す SimpleXMLIterator::hasChildren -- (bool)現在のオブジェクトが子オブジェクトを所有しているかどうかを返す SimpleXMLIterator::key -- (string)現在のオブジェクトのキー名を返す SimpleXMLIterator::next -- (void)次のオブジェクトに移動する SimpleXMLIterator::rewind -- (void)SimpleXMLを初期化する SimpleXMLIterator::valid -- (bool)現在のオブジェクトがSimpleXMLIteratorとして有効かどうかを返す
*ここでいう”現在”とは”現在ポインタが指定しているオブジェクト”のこと
これらは特別な引数を必要としない。