PHP - 使用simplexml_load_string解析XML - 使用CDATA获取空值?

时间:2014-12-19 18:34:47

标签: php simplexml cdata

解析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源的情况下解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

问题似乎是您对数组执行的转换可以返回与XML对象的实际结构不同的结果。

类似下面的代码应该为您提供一个包含正确信息的数组:

$array = array_map('strval', (array) $xml->Product);

注意将这些部分投射到您将从中获取数据的字符串(在示例中通过strval()完成)。相反,json_encode() SimpleXMLElement 的效果不佳。