PHP用simplexml_load_file解析含CDATA的XML返回空如何解决
问题原因
- 节点访问层级错误:
ss_pageDescription是settings的子节点,不能直接从根节点$galleries访问 - CDATA内容解析问题:SimpleXML默认将
<![CDATA[]]>包裹的内容识别为独立对象,直接输出或print_r不会显示文本内容
修复方案
方案1:加载XML时开启CDATA自动解析
加载时添加LIBXML_NOCDATA参数,直接将CDATA内容转为普通字符串:
// 第三个参数指定解析CDATA为字符串 $galleries = simplexml_load_file("../gallery/page.xml", 'SimpleXMLElement', LIBXML_NOCDATA) or die ("no gallery found"); // 按正确层级访问节点 echo $galleries->settings->ss_pageDescription; print_r($galleries);
方案2:访问时强制转换为字符串
不修改加载逻辑,读取节点时强制转换为string类型提取CDATA内容:
$galleries = simplexml_load_file("../gallery/page.xml") or die ("no gallery found"); // 强制类型转换获取内容 echo (string)$galleries->settings->ss_pageDescription;
内容的提问来源于stack exchange,提问作者Dilhan
相关产品推荐
相关产品推荐

