PHP基于DOMDocument解析和生成xml的方法分析

发布时间 - 2026-01-11 02:22:50    点击率:

本文实例讲述了PHP基于DOMDocument解析和生成xml的方法。分享给大家供大家参考,具体如下:

前面和大家分享了SimpleXML操作xml的一些知识,但是php中除了simplexml还有DOMDocument,这次就着重来看看DOMDocument的用法,还是把生成xml和解析xml分开写

1. xml的生成

DOMDocument操作xml要比先前的simplexml要复杂一点,我觉得simplexml就想Java里的dom4j,不管怎样原理都是一样的。如果把DOMDocument里的节点,属性看做是枝叶那么DOMDocument的DOMDocument就是根,节点和属性都挂载在这个对象下面。看看下面的代码就很清楚了

<?php
 $doc=new DOMDocument('1.0','utf-8');
 //创建根节点
 $root=$doc->createElement("StudentInfo");
 //创建第一个子节点
 $item=$doc->createElement("Item");
 $name=$doc->createElement("name","蔡依林");
 $studentnum=$doc->createElement("num","2009010502");
 //创建属性(phpdom可以把任何元素当做子节点)
 $id=$doc->createAttribute("id");
 $value=$doc->createTextNode('1');
 $id->appendChild($value);
 //在父节点下面加入子节点
 $item->appendChild($name);
 $item->appendChild($studentnum);
 $item->appendChild($id);
 $item2=$doc->createElement("Item");
 $name2=$doc->createElement("name","潘玮柏");
 $studentnum2=$doc->createElement("num","2009010505");
 $id2=$doc->createAttribute("id");
 $value2=$doc->createTextNode('2');
 $id2->appendChild($value2);
 $item2->appendChild($name2);
 $item2->appendChild($studentnum2);
 $item2->appendChild($id2);
 $root->appendChild($item);
 $root->appendChild($item2);
 //把根节点挂载在DOMDocument对象
 $doc->appendChild($root);
 header("Content-type: text/xml");
 //在页面上输出xml
 echo $doc->saveXML();
 //将xml保存成文件
 $doc->save("stu.xml");
?>

这段代码仔细看的话其实不复杂,可能性在id属性的那个地方会有点疑问,文本节点也必须挂载在DOMDocument下面,之后把文本节点挂载在属性下面。来看下生成的xml

其实DOMDocument是首先生成节点或属性,而xml的层级关系是最后通过addchild来体现的

2. DOMDocument解析

<?php
 $doc=new DOMDocument();
 //如果是解析xml字符串则使用loadXML
 $doc->load('stu.xml');
 //取得根节点
 $root=$doc->documentElement;
 //通过标记的名字取得对应的元素
 $items=$root->getElementsByTagName('Item');
 foreach($items as $key=>$val){
  // echo count($val->attributes);
  //id是第一个属性所以使用item(0),nodeValue用来取得节点的值
  echo $val->attributes->item(0)->name.":".$val->attributes->item(0)->nodeValue."  ";
  foreach($val->getElementsByTagName('name') as $key2=>$val2){
    echo $val2->nodeValue."  ";
  }
  foreach($val->getElementsByTagName('num') as $key3=>$val4){
    echo $val4->nodeValue."</br>";
  }
 }
?>

解析的话重在理解,getElementsByTagName方法,attributes属性和item是解析xml的重点。别的都算简单,看看解析出来的东西

总的来说是比simplexml麻烦一些,但是作为程序员还能接受吧。

PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线XML/JSON互相转换工具:
http://tools./code/xmljson

在线格式化XML/在线压缩XML
http://tools./code/xmlformat

XML在线压缩/格式化工具:
http://tools./code/xml_format_compress

XML代码在线格式化美化工具:
http://tools./code/xmlcodeformat

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP针对XML文件操作技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP错误与异常处理方法总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。


# PHP  # DOMDocument  # 解析  # 生成  # xml  # PHP使用DOMDocument类生成HTML实例(包含常见标签元素)  # 如何解决php domdocument找不到的问题  # PHP中使用DOMDocument来处理HTML、XML文档的示例  # PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】  # PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】  # PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案  # php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)  # PHP XML操作类DOMDocument  # php基于DOMDocument操作页面元素实例  # 操作技巧  # 程序设计  # 相关内容  # 在这个  # 我觉得  # 第一个  # 还能  # 感兴趣  # 这段  # 给大家  # 要比  # 很清楚  # 就想  # 大家分享  # 更多关于  # 所述  # 仔细看  # 重来  # 几款  # 面向对象 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 简单实现Android验证码  Bootstrap整体框架之JavaScript插件架构  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  大同网页,大同瑞慈医院官网?  Python制作简易注册登录系统  jquery插件bootstrapValidator表单验证详解  音响网站制作视频教程,隆霸音响官方网站?  Laravel怎么在Blade中安全地输出原始HTML内容  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何在自有机房高效搭建专业网站?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  在centOS 7安装mysql 5.7的详细教程  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  新三国志曹操传主线渭水交兵攻略  魔方云NAT建站如何实现端口转发?  Laravel如何为API编写文档_Laravel API文档生成与维护方法  智能起名网站制作软件有哪些,制作logo的软件?  在线制作视频网站免费,都有哪些好的动漫网站?  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel如何升级到最新版本?(升级指南和步骤)  如何批量查询域名的建站时间记录?  详解CentOS6.5 安装 MySQL5.1.71的方法  网站制作免费,什么网站能看正片电影?  javascript中闭包概念与用法深入理解  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  使用Dockerfile构建java web环境  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  如何用PHP快速搭建高效网站?分步指南  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  PHP正则匹配日期和时间(时间戳转换)的实例代码  在Oracle关闭情况下如何修改spfile的参数  网站建设整体流程解析,建站其实很容易!  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  php 三元运算符实例详细介绍  Laravel如何实现事件和监听器?(Event & Listener实战)