PHP数组到XML函数

时间:2012-06-30 16:58:05

标签: php xml json recursion

我在PHP页面中收到一个JSON字符串:

$JSON = $_POST['submit'];

$Array = json_decode($JSON);

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

echo $xml;

其中arrayToXML是我为puropose制作的函数。

该功能正常,但我想解决几个问题:

1.Duplicate Tags:

假设我们有一个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);

但事实证明是完全的wrog。什么是正确的?

非常感谢。

2 个答案:

答案 0 :(得分:3)

正则表达式通常不适合解析和使用xml。 PHP有非常好的内置解析器,DOMDocument(真棒libxml2的包装器)和SimpleXML

答案 1 :(得分:1)

引用第一个疑问“重复标记”,我认为您可以做的最好的方法是将JSON字符串更改为您需要的正确结构,如果您需要多个电话号码元素,请将JSON字符串更改为不仅仅是一个电话号码元素,也许你可以做一些像preg_replace或识别阵列的结构来改变它,但这将是一种解决方法。 但一般来说,我同意Explosion Pills,你有可以用来解析那个数组的工具。