You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP SimpleXML中为address子节点添加CDATA?

解决PHP SimpleXML添加CDATA包裹的address节点问题

SimpleXML本身没有原生支持添加CDATA内容的方法,需要结合PHP的DOM扩展来实现。以下是修改后的完整代码:

if(ISSET($_POST['insert'])){
    if(file_exists("foo.xml")){
        $members = simplexml_load_file('foo.xml');
        $member = $members->addChild('member');
        $member->addChild('name', $_POST['name']);
        
        // 创建空的address节点
        $addressNode = $member->addChild('address');
        // 将SimpleXML节点转为DOM节点
        $domAddress = dom_import_simplexml($addressNode);
        // 获取DOMDocument对象
        $domDoc = $domAddress->ownerDocument;
        // 创建CDATA段并追加到address节点
        $domAddress->appendChild($domDoc->createCDATASection($_POST['address']));
        
        file_put_contents('member.xml', $members->asXML());
        header('location:index.php');
    }
}

关键修改说明:

  1. 先创建空的address节点,避免直接用addChild传入文本内容
  2. 通过dom_import_simplexml()把SimpleXML节点转换为DOMElement对象,这样就能使用DOM的API来操作CDATA
  3. 利用DOMDocument的createCDATASection()生成包含地址内容的CDATA段,再追加到address节点中

修改后生成的XML将符合你的期望:

<?xml version="1.0"?>
<members>
<member>
<name>John</name>
<address><![CDATA[New York]]></address>
</member>
</members>

内容的提问来源于stack exchange,提问作者hoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:53:19