PHP SimpleXML のXPathを利用してデータを取り出す

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー




前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2014/8/17 11:19 | 最終変更
タツ  管理人   投稿数: 2448
XOOPSのホームページとは直接的には関係はありませんが、ここに記載します。

全く同じPHPスクリプトプログラムをローカルサーバーで問題なく稼働するのを確認した後、レンタルサーバーにアップし稼働させた所、途中、各ブラウザで「接続がリセットされました」「このページは表示されません」「データを受信していません」など表示は違えど、接続ができなくなる旨のエラーが発生しました。 ローカルサーバーもレンタルサーバーもApacheのバージョンは違いますが、PHPのバージョンは5.25で同じです。

時間をかけ、原因を探った所、PHP SimpleXML のXPathのローカルパスに問題があることが分かりました。

以下を例に示します。

--------------------------------------
<?php
$xml = simplexml_load_string(
'<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns="">
<channel> 
 <title>Search Results</title>
 <description>Processing time: 30 ms</description> 
 <item> 
 <servType>AAA</servType>
 <guid>BBB</guid>
 <images>
    <imageSet> 
    <image>Aimage</image> 
    <image>Bimage</image>     
    <image>Cimage</image>
    </imageSet> 
 </images> 
 </item>
</channel>
</rss>');

//channelの各要素を取り出す場合
$found1 = $xml->xpath('/rss/channel');
//print_r($found1);

//Aimageを取り出す場合
$found2 = $xml->xpath('/rss/channel/item/images/imageSet/image');
echo($found2[0][0]);
?>

因みに上記コードをテキストエディターに貼り付け、xmltest.phpとしてローカルサーバーにセーブし稼働させると(例 localhost/xmltest.php)「Aimage」が出力されます。ところがレンタルサーバーでは接続エラーが発生します。

ここで、xpathのローカルパスの最後に[1]を追加し変更します。

//channelの各要素を取り出す場合
$found1 = $xml->xpath('/rss/channel[1]');
//print_r($found1);

//Aimageを取り出す場合
$found2 = $xml->xpath('/rss/channel/item/images/imageSet/image[1]');
echo($found2[0][0]);
------------------------------------

普通、配列の最初は[0]から始まりますが、xpathは[1]から始まります。たったこれだけのことでエラーが解除され、稼働するようになりました。

ただ、レンタルサーバーも様々なので、全てに当てはまるとは思いません。1つの参考記事として掲載しました。

投票数:17 平均点:4.71



     条件検索へ

旅と気ままなフォーラム最新投稿

欲しい商品が必ず見つかるメジャーなネットショップ

ログイン

オンライン状況

54 人のユーザが現在オンラインです。 - 9 人のユーザが 旅と気ままなフォーラム を参照しています。.

登録ユーザ 0 ゲスト 54

Facebook,RSSリンク表示

検索

アクセスカウンタ

今日 : 182
昨日 : 197
総計 : 1754788