我在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。什么是正确的?
非常感谢。
答案 0 :(得分:3)
正则表达式通常不适合解析和使用xml
。 PHP有非常好的内置解析器,DOMDocument
(真棒libxml2的包装器)和SimpleXML
。
答案 1 :(得分:1)
引用第一个疑问“重复标记”,我认为您可以做的最好的方法是将JSON字符串更改为您需要的正确结构,如果您需要多个电话号码元素,请将JSON字符串更改为不仅仅是一个电话号码元素,也许你可以做一些像preg_replace或识别阵列的结构来改变它,但这将是一种解决方法。 但一般来说,我同意Explosion Pills,你有可以用来解析那个数组的工具。