ホームページ >バックエンド開発 >PHPチュートリアル >PHP XML 文字列の解析 (オンライン ソリューション)
長い間 php に触れていませんでした。今日、XML 文字列の解析で問題が発生しました。内容は
<?xml version='1.0' encoding='utf-8'?><order_info><user_name>13817969688</user_name><mobile>13817969688</mobile><tel>021-54485454</tel><customer_name>刘先生</customer_name><city_name>上海</city_name><district_name>长宁</district_name><address>新中路999号4栋8楼</address><customer_word>送货前电话联系,谢谢。</customer_word><goods_infos><good><goods_id>51541</goods_id><goods_amount>1</goods_amount></good><good><goods_id>51542</goods_id><goods_amount>3</goods_amount></good></goods_infos></order_info>です
$xml=simplexml_load_string($xmlStr);foreach($xml->order_info as $item) { oreach($item as $k=>$v) echo "$k $v\n";}を使用してください
ディスカッションに返信 (解決策)
header('Content-Type: text/xml');
1. simplexml はルート ノードを無視します
サンプル データの場合、ルート ノード order_info は無視されるため、$xml->order_infoは存在しないため、出力はありません
第 1 レベルの子ノードの値を出力します。
foreach($xml->children() as $k=>$v) { if(empty($v)) //这里检查是否有子节点,如有就不打印。这样就跳过了 goods_infos echo "$k $v\n";}を次のように記述します 2. Goods_infos の下に適切な子ノードを出力する場合は、
foreach($xml->goods_infos->good as $item) { foreach($item as $k=>$v) echo "$k $v\n";}を記述します
3. プログラム ファイルがutf-8 ではなく、
$xmlStr = str_replace("encoding='utf-8' ", "encoding='gbk'", $xmlStr); も必要です
これは、文字セットを実際の文字セットに変更することです。
もちろん、出力結果は utf-8 のままです
すべてのノードをトラバースする必要がある場合は、
function show_child($xml) { foreach($xml->children() as $tag=>$item) { if($item) show_child($item); else echo "$tag: $item\n"; }}show_child($xml);user_name: 13817969688
city_名前:上海
District_name: 長寧
address: 8th Floor, Building 4, No. 999 Xinzhong Road
customer_word: 配達前にお電話ください。ありがとうございます。
Goods_id: 51541
Goods_amount: 1
Goods_id: 51542
Goods_amount: 3
1. simplexml はルート ノードを無視します
サンプル データでは、ルート ノード order_info が無視されるため、$xml->order_info は存在しません, したがって、出力はありません
第一レベルの子ノードの値を出力するには、次のように記述する必要があります
foreach($xml->children() as $k=>$v) { if(empty($v)) //这里检查是否有子节点,如有就不打印。这样就跳过了 goods_infos echo "$k $v\n";}2. Goods_infos の下に適切な子ノードを出力する場合は、それを記述します
foreach($xml->goods_infos->good as $item) { foreach($item as $k=>$v) echo "$k $v\n";}
3. プログラムの場合ファイルが utf-8 ではない場合は、
$xmlStr = str_replace("encoding='utf-8'", "encoding='gbk'", $xmlStr); も必要です
文字セットを実際の文字セットに変更します
もちろん、印刷結果はutf-8のままです
詳細な回答をありがとうございます。しかし、今、問題が発生しています。simplexml_load_stringの処理前は正常ですが、処理後の出力は文字化けしており、トランスコーディングされているようです。私のプログラムファイルは gbk なので、 $xmlStr = str_replace("encoding='utf-8'", "encoding='gbk'", $xmlStr); と書きましたね。
もちろん、印刷結果は utf-8 のままです
utf-8 は xml の作業言語であるため
印刷データを 1 つずつトランスコードする必要があります
たとえば、 echo iconv('utf-6', 'gbk' 、$v );