如何在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'); } }
关键修改说明:
- 先创建空的
address节点,避免直接用addChild传入文本内容 - 通过
dom_import_simplexml()把SimpleXML节点转换为DOMElement对象,这样就能使用DOM的API来操作CDATA - 利用DOMDocument的
createCDATASection()生成包含地址内容的CDATA段,再追加到address节点中
修改后生成的XML将符合你的期望:
<?xml version="1.0"?> <members> <member> <name>John</name> <address><![CDATA[New York]]></address> </member> </members>
内容的提问来源于stack exchange,提问作者hoi
相关产品推荐
相关产品推荐

