• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:php で xml)

PHPでXMLデータを取得する方法とは?

このQ&Aのポイント
  • XMLデータをPHPで取得する方法について解説します
  • 選手単位でXMLデータの内容を取り出す方法を紹介します
  • データの追加や更新についても解説します

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

サンプルを作ってみました。 想定するXMLファイル(data.xml) <?xml version="1.0" encoding="UTF-8" ?> <選手リスト> <選手 no="51"> <姓>鈴木</姓> <名>イチロー</名> <守備>ライト</守備> </選手> <選手 no="52"> <姓>高木</姓> <名>キチロー</名> <守備>レフト</守備> </選手> </選手リスト> ------------------------------------------- <?php function default_handler($parser, $node){ return ; } function start_element_handler($parser, $name, $attr){ global $el, $Buffer, $Counter; $el=mb_convert_encoding($name, "SHIFT_JIS","UTF-8"); switch($el){ case "選手": $no=mb_convert_encoding($attr["no"], "SHIFT_JIS","UTF-8"); $Buffer[$Counter]["no"]=$no; break; case "姓": case "名": case "守備": break; default: $el=""; #その他(ルートエレメントとか)は無視 } } function end_element_handler($parser, $name){ global $el, $Counter; $el=mb_convert_encoding($name, "SHIFT_JIS","UTF-8"); if($el=="選手"){ $Counter++; } $el=""; } function character_data_handler($parser, $text){ global $el, $Buffer, $Counter; if($el!=""){ $Buffer[$Counter][$el]=mb_convert_encoding($text, "SHIFT_JIS","UTF-8"); } } $Buffer = array(); $Counter = 0; $el=""; #現在処理中のエレメント $parser = xml_parser_create("UTF-8"); if(!$parser){ print "failer XML Parser create"; exit ; } xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);#大文字に変換しない xml_set_default_handler($parser, "default_handler"); xml_set_element_handler($parser, "start_element_handler","end_element_handler"); xml_set_character_data_handler($parser, "character_data_handler"); $fp=fopen("data.xml","r"); while($fin = fread($fp, 4096)){ if(!xml_parse($parser, $fin, feof($fp))){ print "Error at Reading xml"; break; } } fclose($fp); xml_parser_free($parser); #出力 for($i=0;$i<$Counter;$i++){ print "背番号:" . $Buffer[$i]["no"] . "\n"; print "  姓:" . $Buffer[$i]["姓"] . "\n"; print "  名:" . $Buffer[$i]["名"] . "\n"; print " 守備:" . $Buffer[$i]["守備"] . "\n\n"; } ?> ---------------------------------------------------------- 最後の出力でわかるように、それぞれの選手データを配列に格納していきます。 そのようにしているので、登録した番号で、まとめて選手データを扱えます。 選手の名前や、背番号をキーにすることもできますが、重複する可能性があると思ったので、単純に出現した順番に番号を振っています。

bavarois
質問者

お礼

ありがとうございます!(o^□^o)♪ でも、コピぺしたらError at Reading xmlって出ました。(>_<)

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>いろいろな文字コードを試してみます。 XPを使っているなら、ノートパッド(メモ帳)にコピペして 名前を付けて保存から文字コードUTF-8で保存するのが簡単

bavarois
質問者

お礼

うわわわわわーーっ!!キタ━━(o^□^o)━━♪☆♪ いろんなことを試してもずっとできなかったのに、「ノートパッド(メモ帳)にコピペして名前を付けて保存から文字コードUTF-8で保存」したらできました!! ありがとうございます!!(。・w・)b

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>Error at Reading xmlって出ました。(>_<) xmlのデータ部分は、#1のヤツを使っているんですか? それとも別のデータでしょうか #1を使っていて問題になるとしたら文字コードですかね #1では、データ部分はUTF-8で作成していることを想定してます。 EUC-JPならそのように変更して下さい。 ><?xml version="1.0" encoding="UTF-8" ?> の部分とか >$parser = xml_parser_create("UTF-8"); の部分とか >mb_convert_encoding($name, "SHIFT_JIS","UTF-8"); のような諸々の部分

bavarois
質問者

お礼

回答ありがとうございます。 xmlのデータ部分は、#1のヤツです。 いろいろな文字コードを試してみます。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A