0

PHP ページで JSON 文字列を受け取りました。

$JSON = $_POST['submit'];

$Array = json_decode($JSON);

$xml = arrayToXML($Array,"","root");

echo $xml;

ここで、arrayToXMLは目的のために作成した関数です。

この機能は正常に動作しますが、修正したい問題がいくつかあります。

1.タグの重複:

次のような JSON 文字列があるとします。

{element:[{sub1:xxxx,sub2:xxx},{sub1:xxxx,sub2:xxx},{sub1:xxxx,sub2:xxx}]}

対応するXMLは次のようになります

<element>

    <sub1>xxxx</sub1>
    <sub2>xxx</sub2>

</element>

<element>

    <sub1>xxxx</sub1>
    <sub2>xxx</sub2>

</element>

<element>

    <sub1>xxxx</sub1>
    <sub2>xxx</sub2>

</element>

しかし、私の関数の再帰は、最初のタグと最後のタグを複製します。その理由はわかりますが、それを修正する方法がわかりません。そこで、重複したタグを preg_replace することでこれを解決しました。これを修正するより良い方法はありますか?これについて考えていたのは本当に数日でした。

2.インデント:

関数が人間が読める形式で xml を生成するようにしたかったので、隣接するタグの間に改行を入れましたが、正しいネストされたインデントを定義するにはどうすればよいでしょうか?

私はこれを試しました:

$xml = preg_replace("/(\t*)(<\/?.+>)(<\/?.+>)/","$2\n$1\t$3",$xml);

しかし、完全に間違っていることが判明しました。正しいものは何でしょう?

どうもありがとう。

4

2 に答える 2

3

正規表現はxml、一般的に解析および操作には適していません。PHP には、DOMDocument(素晴らしい libxml2 のラッパー) とSimpleXML.

于 2012-06-30T17:16:12.963 に答える
1

最初の疑い「重複タグ」を参照すると、JSON 文字列を必要な正しい構造に変更するのが最善だと思います。複数の電話番号要素が必要な場合は、JSON 文字列を複数の要素を持つように変更します。電話番号要素、おそらく preg_replace のようなことを行うか、配列の構造を特定して変更することができますが、それは一種の回避策になります。しかし、一般的に、私は Explosion Pills に同意します。その配列を解析するために使用できるツールがあります。

于 2012-06-30T17:37:47.063 に答える