解析XML数组时:
<?xml version="1.0" encoding="utf-8"?>
<Products>
<Product>
<Code>ABC-1001</Code>
<Brand>ZCOM</Brand>
</Product>
</Products>
我得到了输出:
Array
(
[0] => Array
(
[Code] => AP1024-DDRII640
[Brand] => ZCOM
)
}
但是当XML就像:
<?xml version="1.0" encoding="utf-8"?>
<Products Code="ABC-1001">
<Product>
<Code><![CDATA[ABC-1001]]></Code>
<Brand><![CDATA[ZCOM]]></Brand>
</Product>
</Products>
它返回:
array
0 =>
array (size=12)
'@attributes' =>
array (size=1)
'Code' => string 'ABC-1001' (length=8)
'Code' =>
array (size=0)
empty
'Brand' =>
array (size=0)
empty
这是从URL解析XML的方式:
$updateUrl = file_get_contents('http://www.someplace/xmlfeed/xml.cfm?asd=12345&uhg=9999');
$updateXml=<<<XML
$updateUrl
XML;
$updateXmlObject=json_decode(json_encode((array) simplexml_load_string($updateXml)), 1);
$updatePHPArray=$updateXmlObject['Product'];
和
var_dump($updatePHPArray);exit;
如上所示给出输出。
现在,为什么我在第二个实例中获取空值,如何在不访问XML源的情况下解决这个问题呢?
答案 0 :(得分:1)
问题似乎是您对数组执行的转换可以返回与XML对象的实际结构不同的结果。
类似下面的代码应该为您提供一个包含正确信息的数组:
$array = array_map('strval', (array) $xml->Product);
注意将这些部分投射到您将从中获取数据的字符串(在示例中通过strval()
完成)。相反,json_encode()
与 SimpleXMLElement 的效果不佳。