7
我目前处理的广泛XML文件中删除的属性,以使一些处理更容易我用那样广泛的堆栈溢出提及以下方法转换XML到PHP阵列JSON上的一些元素
$xml = simplexml_load_string($xml_string);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
这一直是真棒,但会在我的代码中,我注意到有些情况下对某些元素属性的不正确转换,在这一步$json = json_encode($xml);
这里是一个精简的XML实例。
<?xml version="1.0"?>
<property>
<landDetails>
<area unit="squareMeter"/>
</landDetails>
<buildingDetails>
<area unit="squareMeter">100</area>
</buildingDetails>
</property>
这里是输出。
Array (
[landDetails] => Array (
[area] => Array (
[@attributes] => Array (
[unit] => squareMeter
)
)
)
[buildingDetails] => Array (
[area] => 100
)
)
如上所示,如果元素包含关于该确切节点的任何信息,则不会处理与该元素关联的属性。这会导致转换之间的重大数据丢失。
有谁知道如何解决这个问题?
在此先感谢!
只看这一点,上面的代码似乎没有传入前两个xml子元素的属性数组? 例如,如果您在'property'上添加'color =“red”'属性,然后在'landDetails'和'buildingDetails''和'color =“blue上添加'color =”green“'属性,则使用上述XML “区域”上的''属性。 只有蓝色属性才会导出到正在进行的阵列中。 – 2014-09-09 22:49:17
@DevonMather对,我不知道为什么这个foreach循环是在has_children检查。事实上,这has_children检查是不需要的。我发现SimpleXML返回一个带空格和换行符的字符串。 'trim'足以检测它是否没有实际值。我在几种不同的XML结构上尝试了这个新代码,现在看起来好了。 :) – Sugar 2014-09-10 05:57:32
此代码似乎不起作用。 ' <节点2 attr3 = “AAA” attr4 = “BBB”> <节点2 attr3 = “CCC” attr4 = “DDD”> XXX '这里'aaa'和'bbb'不出现在输出中。 –
2017-07-17 03:36:26