人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpでxml用のノードを作成し、指定先xmlファイルのノードを書き換える方法について

1.phpでmysqlからデータを取得する(選択肢1-4に該当する都道府県と都道府県のカウント数)
2.各選択肢ごとにカウント数があればすでに存在しているxmlファイルの該当箇所を書き換える

以下phpのコード

//県データの配列
$pre_array = array([0] => "hokkaido",
[45] => "kagoshima", [46] => "okinawa");
//forで4つの選択肢ごとにsqlを実行し下記2つのデータ取得
for($i=1;$i<=4;$i++){
都道府県id・prefectures_id
都道府県のカウント数・count(prefectures_id) AS cnt

ここからどう書いたら良いのでしょうか?カウント数はvalue属性で書き換えたいのです。

以下xmlのコード ammap_data1.xml ?4.xmlまである。
<map>
<areas>
<area mc_name="aichi" title="Aichi"></area>
47都道府県分あります
</areas>
</map>

●質問者: nagayaki
●カテゴリ:ウェブ制作
✍キーワード:47都道府県 AS CNT Hokkaido MySQL
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tezcello
●60ポイント ベストアンサー

$pre_array[prefectures_id] で、mc_name属性の値がわかるのだから、それをキーにして置き換えたら?

SimpleXML でもいいと思いますが、単純なものなら正規表現による置換も可能です。

for ループ内で、こんな感じにすればよいと思います。

$fname = 'ammap_data'.$i.'1.xml';

$str = file_get_contents($fname);
$str = preg_replace('/(<area mc_name="'.$pre_array[0].'" title=".+?")(\s*value="\d+")?>/','$1 value="'.$cnt.'">', $str);
file_put_contents($fname, $str);

value属性として持たせたい理由は分かりませんが、本来なら

<area mc_name="aichi" title="Aichi"><count>○○</count></area>

なんじゃないかなぁ


http://q.hatena.ne.jp/1255456542

◎質問者からの返答

ammapというmapchartのライブライリーのため、value属性になります。アドバイスありがとうございます。これから実際に書いてみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ