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>

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/10/14 02:55:45
  • 終了:2009/10/17 02:15:18

ベストアンサー

id:tezcello No.1

tezcello回答回数459ベストアンサー獲得回数692009/10/14 08:46:00

ポイント60pt

$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

id:nagayaki

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

2009/10/14 09:29:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません