【发布时间】:2020-07-22 06:46:29
【问题描述】:
如何强制simplexml_load_string()在每个节点使用相同的数据结构。
$xml = "
<level1>
<level2>
<level3>Hello</level3>
<level3>stackoverflow</level3>
</level2>
<level2>
<level3>My problem</level3>
</level2>
</level1>";
$xmlObj = simplexml_load_string($xml)
var_dump($xmlObj);
检查输出,
level1 是一个对象; level2 是一个数组; level2[0] 是一个数组。
level2[1] 是一个对象,因为只有一个子节点,我宁愿将其作为单个索引数组。
我正在从用户那里收集 xml,每个 level2 中可能有 1 个或多个节点。我的清理块是一个 foreach 循环,当level2 内只有一个节点时会失败。
卫生区看起来像这样
foreach($xmlObj -> level2 as $lvl2){
if($lvl2 -> level3[0] == 'condition'){ doSomething( ); }
}
doSomething() 在<level2> 在 xml 字符串中总是有多个子节点时可以正常工作。如果<level2> 只有一个子<level3> 节点,则会出现尝试获取非对象属性的错误。
var_dump 显示数据类型根据嵌套的节点数从对象更改为数组。
我更喜欢一种方法来确保<level2> 始终是一个数组,无论其中有多少孩子。这使我免于编辑太多。但任何其他出路都足够了。
谢谢
【问题讨论】:
-
忽略
var_dump的输出,因为这没有完全显示对象层次结构。如果您添加代码并在那里显示问题,那么它应该很容易修复。 -
你如何检查第 2 级?,你也应该在你的帖子中包含它。
var_dump和或print_r有时会产生误导 -
@Rolf 为什么要将其转换为 JSON?
-
这就是我问的原因。只是想有点开箱即用。
标签: php xml xml-parsing simplexml