【发布时间】:2017-01-21 06:16:41
【问题描述】:
我在 PHP 7.0.10 中使用 json_encode(simplexml_load_string($xml)) 将一些 XML 代码转换为 JSON。以下 XML
<?xml version="1.0" encoding="UTF-8"?>
<comments count="6">
<comment id="1" active="1" object="1" user="1" created="1473776866" updated="1473776866">Something</comment>
<comment id="2" active="1" object="1" user="2" created="1473776866" updated="1473776866">Hello</comment>
<comment id="3" active="1" object="1" user="3" created="1473776866" updated="1473776866">Just a comment</comment>
<comment id="6" active="0"/>
</comments>
创建以下结果:
{"comments":{"@attributes":{"count":"6"},"comment":
["Something","Hello","Just a comment", {"@attributes":{"id":"6","active":"0"}}]}}
谁能解释一下<comment>s 的所有属性发生了什么?
谢谢,感谢您的帮助!
编辑:我发现只要给定节点只有一个文本值:<something attribute="will be dropped">just text</something>,就会删除 XML 元素的所有属性。
所以目前我正在使用一个丑陋的解决方法:我已经修改了代码,在将 XML 提供给simplexml_load_string() 之前,它用<text>string</text> 替换了所有出现的字符串。这个解决方案目前运行良好,但我仍然对更清洁的解决方案感兴趣......
【问题讨论】:
-
那不是json数据使用
simplexml_load_string()!在json他们不是attributes或nodes,只是array或objects with fields.... -
@JustOnUnderMillions:我已经在使用 simplexml_load_string()。 (抱歉,忘了提这个问题。我已经更新了问题。)
-
是的,已经注意到了。你在这里遇到了一件棘手的事情:)
-
@PaulCrovella SimpleXML 不是一个糟糕的 API,但它是一个糟糕的选择 API,用于盲目地将 XML 转换为 JSON,坦率地说,这是一件很奇怪的事情.这是一个很棒的 API,用于实际处理 XML 数据,例如在控制流或模板中使用值。
-
@Paul Crovella 你的意思是 above:命名空间和其他东西吗?我注意到的一件事是,当我解析一个 1GB 的 xml 时,它使用了 10GB 内存 :) 我使用了 PARSE_HUGH 标志。但是 SimpleXML 像 PHP 中的所有东西一样既棘手又有趣