1-2.PHPによるXML解析
curl関数などを使って得られたXMLファイルはsimplexml関数を使って解析できます。
XMLファイル名をpatinfoget.xmlとすると
<?php
$datafile="patinfoget.xml";
#Simplexml関数でXMLファイルを解析
$xml = simplexml_load_file($datafile);
#社会保険のレコード枠を数える
foreach($xml->record->record->record->array as $data)
{
#echo $data->attributes() . ": " . $data->count() . "<br />";
}
$HI=$data->count();
#公費のレコード枠を数える
foreach($xml->record->record->record->array[0]->record->array as $data)
{
#echo $data->attributes() . ": " . $data->count() . "<br />";
}
$PI=$data->count();
#氏名・性別・生年月日などを出力
foreach($xml->record->record->record->string as $data)
{
echo $data->attributes() . ": " . $data . "<br />";
}
#住所・電話番号などを出力
foreach($xml->record->record->record->record->string as $data)
{
echo $data->attributes() . ": " . $data . "<br />";
}
$a=0;
while($a < $HI+1) {
echo "<br />";
#社会保険情報を取得
foreach($xml->record->record->record->array->record[$a]->string as $data)
{
#要素が空白のときは出力しない
if ($data != ""){
echo $data->attributes() . ": " .$data."<br />";
}
}
$b=0;
while($b < $PI+1) {
#公費情報を取得
foreach($xml->record->record->record->array->record[$a]->array->record[$b]->string as $data)
{
#要素が空白のときは出力しない
if ($data != ""){
echo $data->attributes() . ": " .$data."<br />";
}
}
$b++;
}
$a++;
}
?>
なお
$url = 'http:#user:password@localhost:8000/api01r/diseaseget?class=01';
$xml = simplexml_load_file($url);
ともできそうですが、この方法ではfile_get_contents関数を使った時と同じく処理速度が遅いので、
curl関数で一旦XMLファイルを取り込んで、simplexml_load_fileで処理するのが速度が速いようです。