位置: 编程技术 - 正文

php 解析xml 的四种方法详细介绍(php读取xml接口数据)

编辑:rootadmin

推荐整理分享php 解析xml 的四种方法详细介绍(php读取xml接口数据),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php读取xml文件,php解析配置文件,php解析流程,php解析流程,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中每组数据格式有出入,不能做到完全统一,那么在写代码时要注意,说不定就得到了错误的结果。比如下面这个例子:

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

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

php 解析xml 的四种方法详细介绍(php读取xml接口数据)

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查询大量数据内存耗尽问题的解决方法 从数据库查询大量数据时会出现内容不够的提示:PHPFatalerror:Allowedmemorysizeofbytesexhausted这个问题在PHP的官方网站上叫缓冲查询和非缓冲查询(Buffered

浅谈PHP定义命令空间的几个注意点(推荐) 1.声明命令空间必须是程序脚本的第一条语句。另外,所有非PHP代码包括空白符都不能出现在命名空间的声明之前。下面是错误的示例:htmlphpnamespaceMyPro

完美解决phpexcel导出到xls文件出现乱码的问题 解决方法如下所示:phpinclude'global.php';$ids=$_GET['ids'];$sql="select*fromcrm_cost_endwhereidin({$ids})";$result=$db-findAll($sql);//echo$result[1]['sn'];//创建一个excel对象$objPHPExc

标签: php读取xml接口数据

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

上一篇:php 生成签名及验证签名详解(php 电子签名)

下一篇:PHP查询大量数据内存耗尽问题的解决方法(php查询数据是否存在)

  • 个体工商户增值税优惠政策2023
  • 个人所得税退税是什么意思?
  • 收到银行存兑汇票
  • 应付利息增加会计分录
  • 关税计入存货成本分录
  • 销售折扣和现金折扣的增值税
  • 往来账审计存在问题及建议
  • 房地产土地增值税计税依据
  • 企业支付员工一年多少钱
  • 增值税专用发票可以开电子发票吗
  • 一般纳税人进项税额转出会计分录
  • 已过认证周期什么意思
  • 筹建期装修费用计入什么科目
  • 行政单位库存物资管理办法
  • 外汇扣税是多少钱啊
  • 购买方开具红字信息表
  • 如何增加发票数量和额度
  • 工伤保险公司缴纳部分为何是0
  • 其他综合收益属于什么科目借贷
  • 冲回上年多提的费用会计分录
  • 卡特迈国家公园熊吃人
  • 应收票据其他应收款都需要提取坏账准备么
  • 分公司怎么开独立开票
  • 专利代理服务费计入什么科目
  • 图文详解一本通
  • 圣米歇尔山法语介
  • 玄学2021
  • tar压缩解压缩命令
  • 最新的目标检测算法2020
  • 数据结构的单链表
  • python爬虫案例题目
  • 个体户怎么报增值税
  • 哪些项目的进项税额可以从销项税额中抵扣
  • 资产负债表和现金流量表之间的勾稽关系
  • 利润表中所得税费用为负数是什么意思
  • 过路费一定是要公司的车辆吗
  • 电子发票如何申领取电子发票
  • 报账单大写金额负数填写方式
  • 小企业长期债券投资
  • 金税盘维护费发票
  • 提高资产利用率的例子
  • 借款费用为什么可以企业所得税税前扣除
  • 以前年度应收账款贷方余额如何调整
  • 开发研究的定义
  • 应收利息科目的表述
  • 支付宝提现到对公账户要收手续费吗
  • 其他应收款收不回来怎么写情况说明
  • 分公司出现法律问题谁负责
  • 一般纳税人证明在哪里开具
  • 公司租赁个人车辆租金多少合适
  • 长期股权投资收回账务处理
  • 生产车间包括什么
  • 一年内到期的非流动负债是经营性负债吗
  • 存货报废损失会计处理
  • 以他人名义投资该签订什么协议
  • 注册资金未缴齐怎么处理
  • 如何使用费用分割单
  • 施工图审查费计入什么会计科目
  • 医疗机构药库设置标准
  • 非营利医疗机构有哪些
  • mysql 厂家
  • sql 语句
  • quickdcf.exe - quickdcf是什么进程 作用是什么
  • win7系统突然打印不了
  • windows重大更新
  • 事件处理的三个要素
  • node.js server-side
  • 批处理copy合并文件
  • ajax按顺序执行
  • jquery中什么方法用于模拟光标悬停事件
  • python按行读取文本并输出到excel
  • 'd:skin' 开头的无效内容。此处不应含有子元素。
  • python单链表输出1到10
  • python中fd
  • 航天金税开票软件服务费可以抵扣税款吗
  • 在税盘上怎么申请电子发票
  • 公司外购设备对外投资账务处理
  • 税务发票机器怎么操作
  • 重庆税务总局发票查询
  • 广东省东莞市电子税务局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设