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_replacing 重复标签解决了这个问题。有没有更好的方法来解决这个问题?这几天真的一直在想这个。

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 回答