【问题标题】:PHP array to XML functionPHP数组到XML函数
【发布时间】:2012-06-30 16:58:04
【问题描述】:

我在 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);

但结果完全错了。什么是正确的?

非常感谢。

【问题讨论】:

  • 您可以使用PEAR::XML_Serializer 将 json 转换为 XML。首先,将json转换为对象,然后将对象转换为XML
  • 函数应该正确链接...

标签: php xml json recursion


【解决方案1】:

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

【讨论】:

  • SimpleXML 绝对是如果您以前从未使用过这两种方法的最佳选择。
【解决方案2】:

参考第一个疑问“重复标签”,我认为您可以做的最好的是将JSON字符串更改为您需要的正确结构,如果您需要多个电话号码元素,请将JSON字符串更改为不仅仅是电话号码元素,也许您可​​以执行 preg_replace 之类的操作或识别数组的结构来更改它,但这将是一种解决方法。 但总的来说,我同意 Explosion Pills,你有可以用来解析该数组的工具。

【讨论】:

    猜你喜欢
    • 2013-03-26
    • 2012-08-22
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多