PHP SimpleXML 中添加子节点和属性需用 addChild() 和 addAttribute() 方法,作用于 SimpleXMLElement 对象; addChild() 创建子元素并支持链式调用,自动转义文本内容; addAttribute() 为已有元素添加属性,属性值自动转义但属性名不校验合法性。

PHP SimpleXML 中添加子节点和属性,主要用 addChild() 和 addAttribute() 两个方法。它们操作的是 SimpleXMLElement 对象,不能直接对字符串或普通数组调用。
添加子节点(使用 addChild)
addChild() 用于向当前元素追加一个子元素。它返回新创建的子节点对象,支持链式调用。
- 基本语法:
$child = $parent->addChild('tagName', 'textContent'); - 若只传标签名,会创建空元素:
$elem->addChild('price');→ - 传内容时自动转义特殊字符(如
&变成&),无需手动处理 - 支持链式添加深层结构:
$xml->addChild('book')->addChild('title')->addChild('em')->addAttribute('class', 'highlight')->addChild('text', 'PHP Guide');
添加属性(使用 addAttribute)
addAttribute() 必须在已有元素上调用,不能对文档根直接使用(除非已获取到根元素对象)。
- 语法:
$element->addAttribute('name', 'value'); - 可多次调用添加多个属性:
$item->addAttribute('id', '123')->addAttribute('type', 'digital'); - 属性值会被自动转义,但属性名不会校验合法性(非法名可能导致生成无效 XML)
- 不支持命名空间前缀的直接写法(如
xs:type),需用第三个参数指定命名空间 URI
常见组合操作示例
构建一个带属性和文本内容的完整节点:
立即学习“PHP免费学习笔记(深入)”;
$xml = simplexml_load_string(' ');
$item = $xml->addChild('product');
$item->addAttribute('sku', 'P1001');
$item->addAttribute('in_stock', 'true');
$item->addChild('name', 'Wireless Mouse');
$price = $item->addChild('price');
$price->addAttribute('currency', 'USD');
$price->addChild('value', '29.99');
结果 XML 片段:
Wireless Mouse 29.99
注意事项和避坑点
SimpleXML 是只读式对象模型,所有修改都作用于内存中的副本;保存需显式调用 asXML() 或 saveXML() 输出。
- 不能用
addChild()向字符串或 null 添加子节点,会报致命错误 - 如果父节点是查询结果(如
$xml->item[0]),确保索引存在,否则返回 false 导致后续调用失败 - 中文等 UTF-8 内容需确保源 XML 声明含
encoding="UTF-8",否则输出可能乱码 - 要插入未转义的 HTML 或 CDATA,SimpleXML 不原生支持,需改用 DOMDocument











