2012-06-30 53 views
0

我在PHP页面接收一个JSON字符串:PHP数组到XML功能

$JSON = $_POST['submit']; 

$Array = json_decode($JSON); 

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

echo $xml; 

其中arrayToXML是我的puropose发的功能。

功能工作正常,但有几个问题我想修正:

1.Duplicate标签:

比方说,我们有一个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功能,所以我把换行相邻标签之间,但我怎么能确定正确的嵌套缩进?

我tryied这样的:

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

,但原来是compleately wrog。什么是正确的?

非常感谢。

+2

包含该功能。 –

+1

您可以使用[PEAR :: XML_Serializer](http://pear.php.net/package/XML_Serializer)将json转换为XML。首先,将json转换为一个对象,然后将该对象转换为XML – Farahmand

+0

函数应该正确链接... – Onheiron

回答

3

一般来说,正则表达式对解析和处理xml的能力很差。 PHP有非常好的内置解析器,包含DOMDocument(真棒libxml2的包装)和SimpleXML

+0

如果您以前从未使用过任何一种,SimpleXML绝对是您的选择。 –

1

引用第一个疑问“重复标签”,我认为你可以做的最好的方法是将JSON字符串更改为所需的正确结构,如果需要多个电话号码元素,请将JSON字符串更改为有不止一个电话号码元素,也许你可以做一些像preg_replace或识别数组的结构来改变它,但这是一种解决方法。但通常,我同意爆炸药丸,你有工具,你可以用它来解析该数组。