如何解析XML获取子元素值?PHP SimpleXMLElement结果优化
问题描述
我有如下XML数据:
<?xml version="1.0" encoding="UTF-8"?> <var> <packid>27441</packid> <clientid>1426</clientid> <desc>PO: 9005969</desc> <planned_activation_date>0</planned_activation_date> </var>
我用下面的PHP代码尝试获取每个子元素的值:
$xml = new \SimpleXMLElement($bef); foreach ($xml->children() as $child) { $event[$someId][$child->getName()] = $child; } print_r($event);
执行后得到的结果是:
Array ( [1147037] => Array ( [packid] => SimpleXMLElement Object ( [0] => 27456 ) [clientid] => SimpleXMLElement Object ( [0] => 1474 ) [desc] => SimpleXMLElement Object ( [0] => Colocation Fiber Cross Connect (PO# 75122)_--Setup Fee ) [planned_activation_date] => SimpleXMLElement Object ( [0] => 0 ) ) )
请问怎么修改才能得到如下目标数组结构?
Array ( [1147037] => Array ( [packid] => 27456 [clientid] => 1474 [desc] => Colocation Fiber Cross Connect (PO# 75122)_--Setup Fee [planned_activation_date] => 0 ) )
解决方案
问题出在你直接把SimpleXMLElement对象赋值给了数组元素,需要将其转换为字符串类型,以下是两种简单的实现方式:
方法1:强制类型转换
在赋值时用(string)强制将$child转为字符串:
$xml = new \SimpleXMLElement($bef); foreach ($xml->children() as $child) { $event[$someId][$child->getName()] = (string)$child; } print_r($event);
方法2:调用对象的__toString()方法
SimpleXMLElement类内置了__toString()方法,直接调用即可获取字符串值:
$xml = new \SimpleXMLElement($bef); foreach ($xml->children() as $child) { $event[$someId][$child->getName()] = $child->__toString(); } print_r($event);
两种方法都能得到目标中的纯字符串值数组,核心都是将SimpleXML对象转换为对应的文本内容。
内容的提问来源于stack exchange,提问作者bart2puck
相关产品推荐
相关产品推荐

