目次
ディスカッションへの返信 (解決策)
ホームページ バックエンド開発 PHPチュートリアル PHP の多次元配列を XML データ形式に変換するという昨日の問題の続きです。

PHP の多次元配列を XML データ形式に変換するという昨日の問題の続きです。

Jun 23, 2016 pm 02:23 PM

まず第一に、昨日の 2 人の友人、jordan102 と xuzuning に感謝したいと思います。
投稿リンク: http://bbs.csdn.net/topics/390609227

彼らが提供したテスト方法は、確かに実行可能で実用的です。

しかし、プロジェクトの開発プロセス中に、このプロジェクトがあまりにも異常であることがわかり、まだそのような状況が続いています

PHP 配列:

$ar=array( 	"auth"=> array(		"user"=>  "user001",		"password"=> "pass001",		"context"=>  "1" 	),	"task"=> array(					"code"=>"0101",					"item"=>array(						"title"=>"abc",						"web"=>array(							"name"=>"baidu.com",							"ip"=>"1.2.3.4",						),						"web"=>array(							"name"=>"sina.com",							"ip"=>"1.1.1.1",						),						"confirm order"=>"1",					),					"reply_to"=>"info@xxx.com",	),);
ログイン後にコピー


item ノードの下に 2 つの Web サブノードがあることに注意してください実際には、Web 上に複数のサブノードが存在する可能性があり、通常は 2 ~ 4 個です

現在の変換プログラム コードは次のとおりです:
$xml = simplexml_load_string('<request />');create($ar, $xml);$xmlData =  $xml->saveXML();echo $xmlData;function create($ar, $xml) {	foreach($ar as $k=>$v) {		if(is_array($v)) {			$x = $xml->addChild($k);			create($v, $x);		}else $xml->addChild($k, $v);	}}
ログイン後にコピー


このコードは比較的効率的ですが、同じ名前のノードが見つかった場合、フィルタリング後、 、最後のノードのみが保持されるため、最終的な出力結果は baidu.com という Web の名前の値が欠落していることに注意してください。

出力結果は次のようになります:
<?xml version="1.0"?><request>	<auth>		<user>user001</user>		<password>pass001</password>		<context>1</context>	</auth>	<task>		<code>0101</code>		<item>			<title>abc</title>			<web>				<name>sina.com</name>				<ip>1.1.1.1</ip>			</web>			<confirm order>1</confirm order>		</item>		<reply_to>info@xxx.com</reply_to>	</task></request>
ログイン後にコピー

変換関数を何度も変更しましたが、まだ完全なデータを出力できません。頭が痛いです...

何か良い方法を教えてください。


ディスカッションへの返信 (解決策)

配列は存在せず、同じ次元の配列内に 2 つの同一のキー名が存在することはできません。

配列は存在しません。同じ次元配列内に 2 つの同一のキー名が存在することはできません。

しかし、相手は私の投稿の XML データ形式をこのように要求しており、他の方法が思いつきませんでした。

<?xml version="1.0"?><request>	<auth>		<user>user001</user>		<password>pass001</password>		<context>1</context>	</auth>	<task>		<code>0101</code>		<item>			<title>abc</title>			<web>				<name>baidu.com</name>				<ip>1.2.3.4</ip>			</web>			<web>				<name>sina.com</name>				<ip>1.1.1.1</ip>			</web>			<confirm order>1</confirm order>		</item>		<reply_to>info@xxx.com</reply_to>	</task></request>
ログイン後にコピー

問題は、入場データとは何ですか?文章?ジソン?それは間違いなくあなたが示した配列ではありません

既製の array2xml クラスと json2xml クラスがたくさんあります

問題は、エントリ データが何なのかということです。文章?ジソン?それは間違いなくあなたが示した配列ではありません

既製の array2xml クラスと json2xml クラスがたくさんあります


私はあなたが言及したこれら 2 つのクラスを使用したことがありません、私は XML を初めて使用します

エントリデータは json ではなく xml 形式です。

相手には私が投稿したXML形式のデータを受け取るインターフェースがあり、その技術文書のスクリーンショットを見ると、その後ろにもnserverが2つ書いてあります。私はそれが間違っているはずだと思います

現在の問題は、配列を XML に変換する問題ではありませんが、配列を生成するときにすでに問題が発生しています。
言い換えれば、php の配列は元のデータを表現できなくなります (少なくとも、現在使用している方法では表現できません)
したがって、問題を解決するには、元のデータを投稿し、その表現を変更してください。

現在の問題は、配列を XML に変換する際の問題ではなく、その配列を生成するときの問題です。
言い換えれば、php の配列は元のデータを表現できなくなります (少なくとも、現在使用している方法では表現できません)
したがって、問題を解決するには、元のデータを投稿し、その表現を変更してください。

先ほど確認したところ、データをXMLデータに変換する前に、配列の値を表示するときに、名前が重複しているものが1つの項目になりました。

相手の入り口ではなく、あなたの入り口です。同じキーを持つことは不可能です

XML はそれほど複雑ではないようです。中国語や特殊文字のエスケープは必要ありません。XML に慣れていない場合は、文字列をループして連結して XML を生成することをお勧めします。もう少し簡単かもしれません。

相手の入り口ではなく、あなたの入り口です。同じキーを持つことは不可能です


さて、先輩の指導の後、それは確かに私がphp配列を作成して値を割り当てたときに定義したキー値の名前と同じであり、配列に問題が発生していることがわかりました。

今、私は愚かな解決策を見つけました。それは、最初にテキスト変数 $xmltext を定義し、相手が送信する必要がある XML データテキストをコピーし、置換が完了した後、置換されたテキストでいくつかの変数を使用することです。直接投稿すると、最初に配列を定義してから XML に変換する必要はありません。

XML はそれほど複雑ではないようです。中国語や特殊文字のエスケープは必要ありません。XML に慣れていない場合は、文字列をループして連結することによって XML を生成する方が簡単かもしれません。


はい、私は今この方法を使用しています


相手の入り口ではなく、あなたの入り口です。同じキーを持つことは不可能です

さて、先輩の指導の後、それは確かに私がphp配列を作成して値を割り当てたときに定義したキー値の名前と同じであり、配列に問題が発生していることがわかりました。

今、私は愚かな解決策を見つけました。それは、最初にテキスト変数 $xmltext を定義し、相手が送信する必要がある XML データテキストをコピーし、置換が完了した後、置換されたテキストでいくつかの変数を使用することです。直接投稿すると、最初に配列を定義してから XML に変換する必要はありません。
これは愚かなことではなく、実際には PHP テンプレートの方法です。ヘッダー>テキスト/xml を出力することを忘れないでください

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

Instagram APIの紹介

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

See all articles