WORD PRESS

WORDPRESS全般、有料テーマのカスタマイズもお任せください

Yahoo! 楽天市場

メジャーEC Yahoo!ショッピング、楽天市場のストア構築やカスタマイズおまかせください

ECサービスストア構築

カラーミー、メイクショップ、BASE、Wowma!など各種ECサービスでのサイト構築お任せください

CMSデザイン

Joomla!、有料のWebRelease2はお任せください

PHPでXMLを読み込んで処理するとき、xpath()を使おうとして失敗しました。

同じスクリプトで、xpath()で処理できるXMLと処理できない(何も出力されない)XMLがあった。

 

原因は、XML内に記述してある xmlns だった。

xmlnsがあると、xpath()がうまく動かないようだ。

参考 http://php.net/manual/ja/simplexmlelement.registerxpathnamespace.php

registerXPathNamespace ( string $prefix , string $ns )

上記のコードが必要だ。

また、xpath にも

'//c:Body/c:Warning[4]/c:Item[1]/c:Area/c:Name'

のようにプレフィックスが、いちいち必須になる

 

気象庁の注意報警報のXMLデータを読み込んだ時の処理。

対処法(PHPコード)

//XML読み込み	
$doc    = simplexml_load_file($url);
//xmlnsを指定
$doc->registerXPathNamespace('c', 'http://xml.kishou.go.jp/jmaxml1/body/meteorology1/');
//xpathで複数Nameが配列で取得される
//Bodyの下、4番目のWarningの下Itemの1番目の下のArea全部のName全部を取得してます
$results = $doc->xpath('//c:Body/c:Warning[4]/c:Item[1]/c:Area/c:Name');

foreach ( $results as $value) {
	echo $value; 
}

 

気象庁のXMLファイルをブラウザで見た感じの画像、registerXPathNamespaceにセットしたxlmnsの位置は緑のマーカーのところだ。


誰に頼んでいいかわからない、そんな案件ご依頼ください

May da Fource be with U

世のよろず商品の選び方草紙

自社運営:WORDPRESS商品レビューブログ

きょうの千鳥

自社運営:芸能人TV出演情報サイト

バス釣り

自社運営:Joomla!バス釣り情報サイト