在PHP里使用SimpleXML解析XML时,节点属性并不以对象成员的形式直接暴露,而是通过类似数组的语法或attributes方法来访问。掌握这一点,就能快速提取XML中的数据。

用数组语法读取单个属性
把SimpleXML元素当成数组,用属性名作为键即可拿到属性值。注意得到的是SimpleXML对象,通常转成字符串使用。
<?php $xmlStr = '<book id="101" lang="zh"><title>PHP入门</title></book>'; $xml = simplexml_load_string($xmlStr); // 访问id属性 $id = (string)$xml['id']; echo $id; // 输出 101 // 访问lang属性 $lang = (string)$xml['lang']; echo $lang; // 输出 zh ?>
用attributes方法获取全部属性
调用节点的attributes方法会返回一个包含所有属性的对象,可遍历拿到名称和值。
<?php
$xmlStr = '<user id="2" role="admin" status="active">Tom</user>';
$xml = simplexml_load_string($xmlStr);
foreach ($xml->attributes() as $name => $value) {
echo $name . '=' . $value . PHP_EOL;
}
// 输出:
// id=2
// role=admin
// status=active
?>
读取特定命名空间下的属性
如果XML节点带有命名空间属性,需要先用getNamespaces拿到空间,再传给attributes方法。
<?php $xmlStr = '<item xmlns:a="https://ipipp.com/ns" a:price="99">Pen</item>'; $xml = simplexml_load_string($xmlStr); $ns = $xml->getNamespaces(true); $price = (string)$xml->attributes($ns['a'])->price; echo $price; // 输出 99 ?>
常见注意点
- 属性值本质是SimpleXML对象,赋值给变量或输出时建议强转字符串。
- 属性名区分大小写,要和XML中写的一致。
- 若属性不存在,用数组语法会返回空对象,用isset判断更稳妥。
简单说,SimpleXML访问属性就靠方括号语法和attributes方法,比DOM轻便很多。
通过上述方式,你可以在PHP中稳定地用SimpleXML读取任意XML属性,满足大部分配置或接口报文处理需求。