PHP提取XML中CDATA内容有四种方法:一、SimpleXML配合LIBXML_NOCDATA与正则提取;二、DOMDocument识别XML_CDATA_SECTION_NODE节点;三、XMLReader直接读取value属性;四、预处理替换占位符再还原。
如果您在PHP中解析XML文档时需要提取CDATA区域内的原始文本内容,则可能是由于默认的XML解析器会将CDATA视为普通文本节点而忽略其特殊标记。以下是实现PHP接收XML CDATA内容的多种方法:
SimpleXML在默认配置下可能无法正确保留CDATA内容,需配合libxml扩展的特定选项启用CDATA支持,并通过自定义处理函数提取值。该方法适用于结构较清晰、CDATA嵌套层级不深的XML文档。
1、调用确保外部实体加载正常(注意安全性)。
libxml_disable_entity_loader(false)
2、使用simplexml_load_string()加载XML字符串,并传入SIMPLEXML_LOAD_STRING常量与LIBXML_NOCDATA标志。
3、对含CDATA的节点调用asXML()方法获取完整XML片段,再用正则提取CDATA内部文本。
4、使用preg_match('//s', $xmlFragment, $matches)捕获CDATA内内容。
5、返回$matches[1]作为纯净的CDATA文本值。
DOMDocument可通过设置preserveWhiteSpace为false并结合loadXML的选项强制识别CDATA节点类型,从而直接访问其内容。该方式能准确区分CDATASection节点与Text节点。
1、实例化DOMDocument对象。
2、设置$dom->preserveWhiteSpace = false以减少空白节点干扰。
3、调用$dom->loadXML($xmlString, LIBXML_NOCDATA)加载源XML。
4、遍历目标元素的childNodes,判断每个节点的nodeType是否等于XML_CDATA_SECTION_NODE(值为4)。
5、对匹配节点读取其nodeValue属性,该属性值即为CDATA包裹的原始未转义内容。
XMLReader适合处理大型XML文件,它以只进游标方式读取,可在遇到CDATA起始标记时切换状态并累积后续字符,直至匹配结束标记。该方法内存占用低且可控性强。
1、创建XMLReader实例并调用XMLReader::open()加载XML源。
2、循环调用read()推进解析位置,检查nodeType是否为XMLReader::CDATA(值为6)。
3、当检测到CDATA节点时,直接读取value属性,该属性已自动剥离边界,返回纯文本。
4、若需兼容非标准CDATA写法(如换行或空格分隔),可对value执行trim()处理。
5、跳过后续非必要节点,继续循环直到XMLReader::EOF。
对于无法修改解析器行为的受限环境(如共享主机禁用LIBXML_NOCDATA),可先将CDATA块临时替换为唯一标识符,解析后再按标识符映射回原始内容。该方法绕过解析器限制但需保证占位符全局唯一。
1、定义安全占位符格式,例如__CDATA_001__,使用uniqid()生成随机后缀。
2、用preg_replace_callback()匹配所有模式,将捕获组存入关联数组并替换为占位符。
3、调用simplexml_load_string()解析已替换的XML字符串。
4、遍历SimpleXML对象所有文本节点,对含占位符的节点值,查找对应原始CDATA内容并替换回去。
5、最终返回的文本节点值即为原始CDATA内容,且无HTML实体转义污染。
# php
# html
# node
# xml解析
# 内存占用
# EOF
# 常量
# 关联数组
# xml
# Libxml
# simpleXML
# 标识符
# 字符串
# 循环
# 对象
# dom
# 加载
# 遍历
# 即为
# 值为
# 文档
# 适用于
# 可在
# 自定义
# 您在
# 再用
相关文章:
网站企业制作流程,用什么语言做企业网站比较好?
如何用景安虚拟主机手机版绑定域名建站?
jQuery 常见小例汇总
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何选购建站域名与空间?自助平台全解析
大型企业网站制作流程,做网站需要注册公司吗?
音乐网站服务器如何优化API响应速度?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
香港服务器部署网站为何提示未备案?
制作网站怎么制作,*游戏网站怎么搭建?
建站之星代理如何获取技术支持?
网站制作公司,橙子建站是合法的吗?
javascript基本数据类型及类型检测常用方法小结
建站主机系统SEO优化与智能配置核心关键词操作指南
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
如何在宝塔面板创建新站点?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
建站之星安装失败:服务器环境不兼容?
网站制作员失业,怎样查看自己网站的注册者?
建站主机选购指南:核心配置与性价比推荐解析
网站制作说明怎么写,简述网页设计的流程并说明原因?
如何选择香港主机高效搭建外贸独立站?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何撰写建站申请书?关键要点有哪些?
建站主机选购指南与交易推荐:核心配置解析
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
制作网站公司那家好,网络公司是做什么的?
如何在建站宝盒中设置产品搜索功能?
个人网站制作流程图片大全,个人网站如何注销?
建站之星如何配置系统实现高效建站?
如何高效配置香港服务器实现快速建站?
Python文件管理规范_工程实践说明【指导】
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
建站VPS选购需注意哪些关键参数?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何零基础在云服务器搭建WordPress站点?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
建站之星如何取消后台验证码生成?
如何通过VPS搭建网站快速盈利?
建站主机空间推荐 高性价比配置与快速部署方案解析
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何在阿里云虚拟主机上快速搭建个人网站?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
建站之星代理商如何保障技术支持与售后服务?
建站之星如何优化SEO以实现高效排名?
建站主机无法访问?如何排查域名与服务器问题
建站之星备案是否影响网站上线时间?
*请认真填写需求信息,我们会在24小时内与您取得联系。