【发布时间】:2013-02-12 02:15:32
【问题描述】:
我有以下 XML:
<account>
<id>123</id>
<email></email>
<status>ACTIVE</status>
</account>
我想把它作为一个数组变量。因此我用$xml = simplexml_load_file() 阅读它。我知道将 simpleXMLElement 转换为关联数组的最简单方法是使用:json_decode(json_encode((array) $xml),1);
问题是我不想将email 键作为空数组,而是作为NULL 值。作为 SimpleXMLElement,它看起来像:
public 'email' =>
object(SimpleXMLElement)[205]
而在数组中它看起来像:
'email' =>
array (size=0)
empty
我想得到:
'email' => NULL
我想到的唯一方法是遍历所有元素并将空数组替换为空值。问题是我的 XML 更大(以上只是为了解释问题)并且我必须迭代很多 XML 元素(这将是手动工作 - 我正在寻找自动的东西)。也许我在其中一个函数中遗漏了一些选项......或者也许还有另一个技巧可以做到这一点?
【问题讨论】:
-
问题是,
email不为空。它是空的。要让它为空,xml 应该是<email /> -
@webnoob 没错! :) 但不幸的是,你仍然不会得到预期的
NULL -
@hek2mgl - 好吧,我认为它会 :(。好吧,另一个想法。将 XML 加载到字符串中,使用一些正则表达式去除没有值的标签,然后解析它。如果它们不存在,您可以将它们视为 null。
-
@webnoob 当 xml 增长时会变得混乱。您还必须更改每种 xml 格式的正则表达式。我目前正在考虑使用 SAX 解析器。这将从 php.ini 中的 foreach 循环中保存 OP。循环将在扩展的 C 代码中完成。它也应该比 json_decode/json_encode 方法更快
-
嗯,好点。虽然,我必须向 OP 询问为什么
null值如此重要的问题。为什么不检查""。甚至可以有一个辅助函数来为你做这件事......
标签: php xml associative-array