Php 从xml文件创建数组

Php 从xml文件创建数组,php,xml,arrays,phpunit,Php,Xml,Arrays,Phpunit,我的xml文件如下所示: <?xml version="1.0" encoding="utf-8"?> <root> <item> <Post> <id><![CDATA[1]]></id> <title><![CDATA[The title]]></title> <body><![CDATA[This is t

我的xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <item>
    <Post>
      <id><![CDATA[1]]></id>
      <title><![CDATA[The title]]></title>
      <body><![CDATA[This is the post body.]]></body>
      <created><![CDATA[2008-07-28 12:01:06]]></created>
      <modified><![CDATA[]]></modified>
    </Post>
  </item>
  <item>
    <Post>
      <id><![CDATA[2]]></id>
      <title><![CDATA[A title once again]]></title>
      <body><![CDATA[And the post body follows.]]></body>
      <created><![CDATA[2008-07-28 12:01:06]]></created>
      <modified><![CDATA[]]></modified>
      <item>
        <item><![CDATA[fdgs]]></item>
      </item>
    </Post>
  </item>
  <item>
    <Post>
      <id><![CDATA[3]]></id>
      <title><![CDATA[Title strikes back]]></title>
      <body><![CDATA[This is really exciting Not.]]></body>
      <created><![CDATA[2008-07-28 12:01:06]]></created>
      <modified><![CDATA[]]></modified>
    </Post>
  </item>
</root>
这是我的代码:

$xml=new Xml2Array();
        $xmlData = simplexml_load_file('d:\\xmlfile\\Array2XmlExampleData.xml');
        $expectedResult=$xml->simpleXMLToArray($xmlData);
        var_dump($expectedResult);
我从var_dump()获得的数组结果为null。
我怎样才能解决这个问题?请帮助我,谢谢。

您没有显示相关的
simpleXMLToArray()
函数。所以我们无法真正判断你的代码出了什么问题

但是,将SimpleXML对象转换为数组实际上并没有那么难——这里有一种方法:

$array = json_decode( json_encode( (array) $xmlData ), true);
将给定的XML转换为数组。但要使其在您的案例中工作,您需要确保使用
LIBXML\u NOCDATA
标志()加载数据:

$xmlData=simplexml\u load\u文件('d:\\xmlfile\\Array2XmlExampleData.xml','simplexmlement',LIBXML\u NOCDATA)

现在,您只需加载XML,遍历
-标记并将它们转换为数组:

$xmlData = simplexml_load_file(
      'd:\\xmlfile\\Array2XmlExampleData.xml', 
      'SimpleXMLElement', 
      LIBXML_NOCDATA
);

$results = [];

foreach($xmlData->item as $item)
{
  $results[] = json_decode(json_encode((array)$item), true);
}
这是一个例子。当然,您需要添加清理逻辑来过滤不需要的元素或进行一些格式化。但你明白了


另外,请确保正确加载了xml,并且您的应用程序具有读取该文件的权限。

Hi,谢谢,但我的函数中的主要问题是,如果(!($xml instanceof simplexmlement))存在一个条件,如果我使用var_dump(get_class($xml))检查,则返回bool(FALSE);它返回simplexmlement。那么,这怎么可能呢?@user2715247如果不看完整的代码,很难判断。您可以编辑您的帖子并添加
simpleXMLToArray()
函数的代码,并告诉您要实现的目标(为什么需要检查类型…?)
if(!($xml instanceof simplexmlement))
的计算结果为
false
,因为您实际上是在检查$xml是否不是simplexmlement的实例。所以如果它是真的,那么返回NOT true,这是假的。这对我来说很好:
$xmlData = simplexml_load_file(
      'd:\\xmlfile\\Array2XmlExampleData.xml', 
      'SimpleXMLElement', 
      LIBXML_NOCDATA
);

$results = [];

foreach($xmlData->item as $item)
{
  $results[] = json_decode(json_encode((array)$item), true);
}