PHP SimpleXML 用方括号语法 $element['attrName'] 访问属性,返回 SimpleXMLElement 对象(可强转 string);遍历多元素需 foreach;访问前用 isset() 检查存在性;修改属性用 addAttribute(),不可直接赋值。

PHP SimpleXML 访问 XML 属性非常直接,核心是用 花括号语法($element['attributeName']),而不是箭头或点号。
用方括号读取属性值
SimpleXML 把属性当作元素的“关联数组”来处理。只要知道属性名,就能像访问数组一样获取它的值。
- 写法是:
$xml->element['attrName'] - 例如:
→... $book['id']返回字符串"101",$book['category']返回"fiction" - 注意:返回的是 SimpleXMLElement 对象,但多数情况可直接当字符串用;如需强转,加
(string)
遍历多个同名元素的属性
如果 XML 中有多个相同标签(比如多个 ),先用 foreach 遍历,再在循环内取属性。
- 示例:
- 代码:
foreach ($xml->items->item as $item) { echo (string)$item['id']; } - 不加
(string)也可能正常输出,但显式转换更稳妥,尤其做比较或拼接时
检查属性是否存在再访问
直接读不存在的属性会发出 PHP Notice。推荐先用 isset() 判断。
立即学习“PHP免费学习笔记(深入)”;
if (isset($node['class'])) { echo $node['class']; }- 也可以用
property_exists($node, 'class'),但isset()更常用、更轻量 - 避免写成
if ($node['class'])—— 空字符串或 "0" 会被当成 false
设置或修改属性(需要额外操作)
SimpleXML 默认不支持直接赋值改属性,必须用 addAttribute() 替代(即使属性已存在)。
-
$node->addAttribute('status', 'active');—— 如果 status 已存在,就更新它 - 不能写
$node['status'] = 'active',这会报错 - 删除属性需手动 unset 子节点或重建,SimpleXML 没有原生 deleteAttribute 方法
基本上就这些。记住关键:属性不是子元素,别用 ->attr;用 ['name'],配合 isset() 和 (string) 就很稳。











