You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:03:16