位置: 编程技术 - 正文

php解析xml 的四种简单方法(附实例)(php解析原理)

编辑:rootadmin

推荐整理分享php解析xml 的四种简单方法(附实例)(php解析原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php读取xml接口数据,php-xml,php解析xml数据,php读取xml文件,php读取xml文件,php-xml,php解析xml数据,php解析xml数据,内容如对您有帮助,希望把文章链接给更多的朋友!

XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument。

1。 XML Expat Parser:

XML Parser使用Expat XML解析器。Expat是一种基于事件的解析器,它把XML文档视为一系列事件。当某个事件发生时,它调用一个指定的函数处理它。Expat是无验证的解析器,忽略任何链接到文档的DTD。但是,如果文档的形式不好,则会以一个错误消息结束。由于它基于事件,且无验证,Expat具有快速并适合web应用程序的特性。

XML Parser的优势是性能好,因为它不是将整个xml文档载入内存后再处理,而是边解析边处理。但也正因为如此,它不适合那些要对xml结构做动态调整、或基于xml上下文结构做复杂操作的需求。如果你只是要解析处理一个结构良好的xml文档,那么它可以很好的完成任务。需要注意的是XML Parser只支持三种编码格式:US-ASCII, ISO--1和UTF-8,如果你的xml数据是其他编码,需要先转换成以上三个之一。

XML Parser常用的解析方式大体有两种(其实就是两个函数):xml_parse_into_struct和xml_set_element_handler。

xml_parse_into_struct

此方法是将xml数据解析到两个数组中:

index数组——包含指向Value 数组中值的位置的指针

value数组——包含来自被解析的 XML 的数据

这俩数组文字描述起来有点麻烦,还是看个例子吧(来自php官方文档)

输出:

其中index数组以标签名为key,对应的值是一个数组,里面包括所有此标签在value数组中的位置。然后通过这个位置,找到此标签对应的值。

如果xml中每组数据格式有出入,不能做到完全统一,那么在写代码时要注意,说不定就得到了错误的结果。比如下面这个例子:

php解析xml 的四种简单方法(附实例)(php解析原理)

要是按照上面那种方式遍历,看似代码简单,但是暗藏危机,最致命的是得到错误的结果(extra3跑到第二个para里了)。所以要以一种比较严谨的方式遍历:

其实我很少用xml_parse_into_struct函数,所以上面所谓“严谨”的代码保不齐还会有其他情况下的bug。- -|xml_set_element_handler

这种方式是为parser设置处理元素起始、元素终止的回调函数。配套的还有xml_set_character_data_handler用来为parser设置数据的回调函数。这种方式写的代码比较清晰,利于维护。

Example:

可见,set handler方式虽然代码行数多,但思路清晰,可读性更好,不过性能上略慢于第一种方式,而且灵活性不强。XML Parser支持PHP4,适用于于使用老版本的系统。对于PHP5环境,还是优先考虑下面的方法吧。

2。 SimpleXML

SimpleXML是PHP5后提供的一套简单易用的xml工具集,可以把xml转换成方便处理的对象,也可以组织生成xml数据。不过它不适用于包含namespace的xml,而且要保证xml格式完整(well-formed)。它提供了三个方法:simplexml_import_dom、simplexml_load_file、simplexml_load_string,函数名很直观地说明了函数的作用。三个函数都返回SimpleXMLElement对象,数据的读取/添加都是通过SimpleXMLElement操作。

SimpleXML的优点是开发简单,缺点是它会将整个xml载入内存后再进行处理,所以在解析超多内容的xml文档时可能会力不从心。如果是读取小文件,而且xml中也不包含namespace,那SimpleXML是很好的选择。

3。 XMLReader

XMLReader也是PHP5之后的扩展(5.1后默认安装),它就像游标一样在文档流中移动,并在每个节点处停下来,操作起来很灵活。它提供了对输入的快速和非缓存的流式访问,可以读取流或文档,使用户从中提取数据,并跳过对应用程序没有意义的记录。以一个利用google天气api获取信息的例子展示下XMLReader的使用,这里也只涉及到一小部分函数,更多还请参考官方文档。

XMLReader和XML Parser类似,都是边读边操作,较大的差异在于SAX模型是一个“推送”模型,其中分析器将事件推到应用程序,在每次读取新节点时通知应用程序,而使用XmlReader的应用程序可以随意从读取器提取节点,可控性更好。由于XMLReader基于libxml,所以有些函数要参考文档看看是否适用于你的libxml版本。

4。 DOMDocument

DOMDocument还是PHP5后推出的DOM扩展的一部分,可用来建立或解析html/xml,目前只支持utf-8编码。

从函数名上看感觉跟JavaScript很像,应该是借鉴了一些吧。DOMDocument也是一次性将xml载入内存,所以内存问题同样需要注意。PHP提供了这么多的xml处理方式,开发人员在选择上就要花些时间了解,选择适合项目需求及系统环境、又便于维护的方法。

以上这篇php解析xml 的四种简单方法(附实例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。

WordPress过滤垃圾评论的几种主要方法小结 由于个人博客小站的空间与mysql空间往往有限,共享服务器资源也有限,所以垃圾评论一定要拦截在写入数据库之外。更可气的是看到空间的统计,很几

微信支付开发交易通知实例 一、交易通知用户在成功完成支付后,微信后台通知(POST)商户服务器(notify_url)支付结果。商户可以使用notify_url的通知结果进行个性化页面的展示

微信支付开发订单查询实例 因为某一方技术的原因,可能导致商户在预期时间内都收不到最终支付通知,此时商户可以通过该API来查询订单的详细支付状态。订单查询API的URL为:ht

标签: php解析原理

本文链接地址:https://www.jiuchutong.com/biancheng/297014.html 转载请保留说明!

上一篇:smarty简单模板变量输出方法 原创(smart模板教程)

下一篇:Zend Framework入门教程之Zend_Session会话操作详解(framework在哪里打开)

  • 浅谈报关单填制的常见错误
  • 资产处置损益影响所有者权益总额吗
  • 实际发生应收账款坏账时的会计处理
  • 普通合伙企业要交什么税
  • 企业股权转让是否交企业所得税
  • 房地产开发公司注册条件
  • 增值税专用发票和普通发票的区别
  • 预缴税多交了,税务局退吗
  • 请问哪些福利费不用交税
  • 定额发票是啥
  • 特殊行业会计公司排名
  • 小微企业的特点及经营模式举例
  • 个人交汽车购置税流程
  • 销货成本销货成本是什么类账户
  • 借款支付工程款合法吗
  • 电子商务在线支付
  • 购入商品入库时发现实收物多余应收数计入什么科目
  • 应付账款少说明什么
  • PHP:mb_ereg_search_init()的用法_mbstring函数
  • 政府发放奖励金如何入账
  • 失业保险稳岗补贴是给个人的还是给企业的
  • PHP:class_implements()的用法_spl函数
  • Win11 Build 22449.1000 预览版发布(附更新修复已知问题汇总)
  • 企业收到分红款是免税收入吗
  • wwwxxx域名选择(www.xxx.com或者.cn)
  • win11更新卡主
  • 微信小程序下单可以退款吗
  • Vue3+element-plus 后台管理系统(含登陆注册功能页面)
  • 固定资产一次性扣除申报表怎么填
  • 购入固定资产入账价值包括增值税吗
  • 受托加工要交消费税吗
  • 职工教育经费可以以后年度结转吗
  • 在高地陶恩山脉的滑雪旅行,奥地利巴德加斯坦 (© RooM the Agency/Alamy)
  • 拥有自我意识的动物有哪些
  • 长期应付款核算范围有哪些
  • openlayers6教程
  • 物业管理可以开保洁发票吗
  • 取得了水电费发票怎么做
  • 资产减值损失属于营业外支出吗
  • 加工费能直接抵税吗
  • discuz发帖标签
  • 自有资金等于货币资金吗
  • 个体经营所得税核定征收2023税率
  • 房产税的定义是什么
  • 出差自己开车去开会怎么报销交通费
  • 处置固定资产亏损,增值税所得税申报不一至情况说明
  • 房地产公司收房款怎么分录
  • 公司收到服务费要交哪些税
  • 小规模防伪税控服务费多少钱
  • 交租金没有发票怎么办
  • 每个银行都有结息
  • 为什么购入股票是综股
  • 农行公户怎么给公户转账
  • 金蝶当月没有账如何结转到下月
  • 免抵退税中免抵税额怎么算
  • 冲销以前年度多计提的折旧
  • 差旅费报销属于自制原始凭证吗
  • mysql unique option prefix myisam_recover instead of myisam-recover-options的解决方法
  • solaris newfs
  • win7系统如何关闭开机自动启动软件
  • Linux下查看某一个程序所使用的内存方法
  • SIMETER.EXE - SIMETER是什么进程 有什么用
  • win8网络连接受限怎么处理
  • win7打开摄像头权限
  • bootstrap表格内容模板
  • JavaScript浏览器扩展
  • Android计算器项目代码
  • 游戏引擎有几种
  • 超全面的竣工验收流程及资料
  • 比较两个字符串的值是否相等
  • android基于什么操作系统
  • 一个简单的网页
  • 解决跨域的原理
  • 表单验证js
  • js面向对象的三大特性
  • android 加载大量图片
  • 电子税务局在手机上能登录吗
  • 中山市国家税务总局阜沙分局局长杨兴华
  • 税控ic卡就是税控盘吗
  • 柴油增值税发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设