Php 从xml文件创建数组
我的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 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);
}