xmlのデータをphpで取り出したいのですが、こういうような形でデータを追加していけるphpのサンプルなどはないでしょうか?
<選手 no="51">
<姓>鈴木</姓>
<名>イチロー</名>
<守備>ライト</守備>
</選手>
<選手 no="52">
<姓>高木</姓>
<名>キチロー</名>
<守備>レフト</守備>
</選手>
できれば、選手単位(姓が高木なら高木選手の姓、名、守備を取り出すような)で内容を取り出したいです。
http://www18.tok2.com/home/koumori27/xml/pxml/px …のサンプルではデータを追加すると下のようになってしまいますし、選手単位では取り出せません。
<選手 no="51">
<姓>鈴木</姓>
<名>イチロー</名>
<守備>ライト</守備>
<姓>高木</姓>
<名>キチロー</名>
<守備>レフト</守備>
</選手>
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";
}
?>
----------------------------------------------------------
最後の出力でわかるように、それぞれの選手データを配列に格納していきます。
そのようにしているので、登録した番号で、まとめて選手データを扱えます。
選手の名前や、背番号をキーにすることもできますが、重複する可能性があると思ったので、単純に出現した順番に番号を振っています。
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");
のような諸々の部分
回答ありがとうございます。
xmlのデータ部分は、#1のヤツです。
いろいろな文字コードを試してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 日本語 日本語のラテン文字表記について 2 2023/01/26 21:17
- 野球 私の選んだプロ野球オールタイム(助っ人外人除く)最強メンバーです。 ❶福本豊(中) ❷イチロー(右) 3 2022/07/16 09:39
- 実用・教育 『在日通名大全』について 1 2022/10/01 09:18
- 野球 昔のアメリカ 秋まで野球 冬はアメフト という選手いましたよね?とくに有名なアスリートの姓名わかりま 3 2022/08/16 11:42
- 野球 エンゼルスの大谷選手の打席の時、大谷シフト(一塁と二塁の間に守備3人)が取られますが、メジャーリーグ 2 2022/07/23 11:29
- 結婚・離婚 婚姻届と姓の変更について教えてください 5 2022/10/16 19:59
- 俳優・女優 木本さんと統一教会 5 2022/07/22 16:22
- 歴史学 手塚と曽山 2 2023/05/01 09:40
- 政治 民主主義と保守勢力 2 2022/07/27 16:06
- 野球 高校野球104回選手権 2 2022/08/09 07:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
こちらはただの直列処理ですか?
-
phpでcookieがうまく保存されない
-
PHPで画像の渡しが上手く行きま...
-
PHPでこのコード自体に意味は無...
-
Q&Aサイトを作成していてURLの...
-
クエリObjectをforeachで回す時...
-
phpでPEAR::DBを使っているので...
-
reuterの記事をbeautiful.soup....
-
phpでクラスのメソッドで同名の...
-
PHP8を使うと、大量のWarningが...
-
SFTPなどは使わないホームペー...
-
awsにApacheとPHPを入れて、何...
-
phpのクラスメソッドの定義が長...
-
PHPで訪問回数を表示するカウン...
-
PHPを使って、別サイトの一部を...
-
jpgraphで表示されない
-
PHP MySQLに画像を直接保存
-
PHPとHTML+Xamppの掲示板で画像...
-
index.phpって何ですか? 具体...
-
index.phpに入るには、どうすれ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
index.phpに入るには、どうすれ...
-
PHP8を使うと、大量のWarningが...
-
PHPSpreadsheetを使って関数を...
-
重複を防ぐ記述について教えて...
-
index.phpって何ですか? 具体...
-
awsにApacheとPHPを入れて、何...
-
phpでPEAR::DBを使っているので...
-
php 確認表示画面で値をSESSION...
-
PHPでユーザー情報を入力して簡...
-
ワードプレスサイト PHP8.0.25...
-
php 完了画面の送信メールのコ...
-
SFTPなどは使わないホームペー...
-
PHPのセッション有効期限について
-
csvファイルについて教えて下さ...
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPで訪問回数を表示するカウン...
-
ファイルアップロードに関して...
-
掲示板を作成しておりアップロ...
-
Q&Aサイトを作成していてURLの...
おすすめ情報