新闻中心

PHP DOMDocument类怎么加载和保存XML

2025-12-14
浏览次数:
返回列表
DOMDocument 是 PHP 处理 XML/HTML 的标准类,需注意编码一致、空白节点处理及错误屏蔽:加载前设 preserveWhiteSpace=false、libxml_use_internal_errors(true),显式指定 encoding;保存时启用 formatOutput=true 可格式化输出。

php domdocument类怎么加载和保存xml

PHP 的 DOMDocument 类是处理 XML(和 HTML)最常用、最标准的方式。它基于 W3C DOM 规范,支持加载、解析、修改和保存 XML 文档。关键在于:加载要处理编码和错误,保存要注意格式化和编码一致性。

加载 XML 文件或字符串

load() 加载文件,loadXML() 加载字符串。默认会解析 DTD 并报告警告(比如编码不匹配、标签未闭合),建议提前配置错误处理:

  • 调用 libxml_use_internal_errors(true) 屏蔽警告,避免因非致命问题中断执行
  • 设置 $doc->encoding = 'UTF-8' 显式声明编码(尤其对无声明的 XML)
  • 若 XML 声明中指定了 encoding="GBK",需确保源内容真实为 GBK,否则解析可能乱码

示例:

Glarity Glarity

Glarity是一款免费开源的AI浏览器扩展,提供YouTube视频总结、网页摘要、写作工具等功能,支持免费的镜像翻译,电子邮件写作辅助,AI问答等功能。

Glarity 131 查看详情 Glarity php
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->encoding = 'UTF-8';
if (!$doc->load('data.xml')) {
  echo "加载失败:" . implode(', ', libxml_get_errors());
}
?>

加载时跳过空白文本节点(让结构更干净)

XML 中换行和缩进会被解析为 DOMText 节点,干扰遍历。可在加载前启用 preserveWhiteSpace = false

  • 必须在 load()loadXML() 之前设置,之后设置无效
  • 它只影响“纯空白”文本节点(全空格/换行),不会删掉元素内有意义的空格

示例:

$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->loadXML('abc');

保存 XML 到文件或字符串

s*e() 写入文件,s*eXML() 返回字符串。注意三点:

  • s*eXML() 默认输出整个文档,加参数如 $doc->s*eXML($node) 可只输出某个子节点
  • 若希望输出带缩进的可读格式,启用 formatOutput = true(但会自动添加换行和空格)
  • 保存的编码由 $doc->encoding 决定,且 XML 声明中的 encoding 属性也会被同步更新

示例(保存为缩进 UTF-8):

$doc->formatOutput = true;
$doc->encoding = 'UTF-8';
$doc->s*e('output.xml'); // 自动写入

常见坑与应对

实际使用中容易卡在这几个地方:

  • 中文乱码:确认源 XML 编码声明、文件真实编码、$doc->encoding 三者一致;读取后可用 mb_detect_encoding() 辅助判断
  • 无法加载远程 URLallow_url_fopen 关闭时 load() 会失败,改用 file_get_contents() + loadXML()
  • 保存后丢失 CDATA 或特殊字符:DOM 默认会转义,若需保留原始内容,用 createCDATASection() 显式创建节点

基本上就这些。DOMDocument 不复杂但容易忽略细节,把编码、空白、错误处理这三块理清楚,日常 XML 操作就稳了。

以上就是PHP DOMDocument类怎么加载和保存XML的详细内容,更多请关注php中文网其它相关文章!


# 解决方法  # 广东关键词排名怎样做  # 迎泽区seo优化口碑  # 布吉怎么找网站推广  # 北京拼多多网站建设优势  # 宝山区专业网站优化案例  # 鼓楼区网站推广营销  # 建站内置seo  # 新乡抖音seo竞价  # 金华排名关键词服务  # 电子商务seo培训  # 如何将  # 创建一个  # php  # 等功能  # 手把手  # 教你  # 换行  # 文档  # 多个  # 加载  # 格式化输出  # 中文乱码  # 编码  # node  # html 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  曝R星经典之作开发图 设计简陋但信息密集!  《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情  sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置  AO3官方可用镜像 Archive of Our Own网页版最新入口  如何将HTML表格多行数据保存到Google Sheet  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  极兔快递快件信息查询系统 极兔快递官网运单号追踪  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  抖音网页版平台入口 抖音网页版官网在线访问教程  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】  不同用户不同价格! 索尼开启账户个性化定价测试  小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍  怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法  126邮箱账号注册 电脑版登录入口  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  12306几点到几点不能订票? | 官方最新系统维护时间全解析  现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践  使用J*aScript检测输入元素是否包含在特定类中  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧  Go调试环境为何无法启动_Go调试器启动失败原因与解决策略  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  单射、满射与双射的关系 一文理清所有逻辑  动漫花园资源网使用步骤_动漫花园资源网下载流程  Pyrogram与g4f集成:异步编程实践与常见错误解决  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  实现全屏滚动与导航点:专业教程  58动漫网在线官方网 58动漫网正版动漫入口网址  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  如何使 Jest 模拟函数默认抛出错误以提高测试效率  css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容  PHP中SSG-WSG API的AES加密实践:正确使用初始化向量  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  Kafka Streams中基于消息头条件过滤消息的实现指南  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践  AO3最新入口2025公告_AO3中文官网合集 

搜索