PHP SimpleXML怎么访问XML属性

16次阅读

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

PHP SimpleXML怎么访问XML属性

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) 就很稳。

text=ZqhQzanResources