本文介绍如何利用 php 的 simplexml 扩展直接解析 xml 字符串,无需转换为数组或 json,即可安全、高效地提取 `
在 PHP 中处理 XML 数据时,最简洁、健壮的方式是直接使用原生的 simplexml_load_string() —— 它返回一个可遍历的 SimpleXMLElement 对象,支持属性访问(用 $element['attribute'])和子元素访问(用 $element->child),无需额外序列化/反序列化步骤。过度依赖 json_encode() + json_decode() 转换不仅性能低,还容易因 XML 结构嵌套不均(如部分
以下为推荐实践代码:
1
7
7
1
12
13
XML;
// 直接加载为 SimpleXMLElement(无需强制转 array 或 json)
$xml = simplexml_load_string($xml_string);
if ($xml === false) {
throw new RuntimeException('Invalid XML string');
}
$result = [];
foreach ($xml->day as $day) {
$dayNumber = (int) $day['number']; // 获取 number 属性
// 使用空合并操作符(?:)安全提取子元素值,缺失时默认为 0
$result[$dayNumber] = [
'worked' => (int) ($day->worked ?? 0),
'active_hours' => (int) ($day->active_hours ?? 0),
'inactive_hours'=> (int) ($day->inactive_hours ?? 0),
];
}
print_r($result);✅ 关键要点说明:
L 属性,返回 SimpleXMLElement,需 (int) 强制转换为整型; ⚠️ 注意事项:
通过该方式,你既能精准提取目标字段,又能保持代码简洁、可维护性强,真正发挥 SimpleXML “即用即取”的优势。