栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PHP的DOM和SimpleXML扩展之间有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP的DOM和SimpleXML扩展之间有什么区别?

简而言之:

SimpleXml

  • 用于简单的XML和/或简单的UseCases
  • 与节点一起使用的有限API(例如,不能对接口进行太多编程)
  • 所有节点属于同一种类(元素节点与属性节点相同)
  • 节点可以魔术访问,例如
    $root->foo->bar['attribute']

DOM

  • 适用于您可能拥有的任何XML UseCase
  • 是W3C DOM API的实现(发现有多种语言实现)
  • 区分各种节点类型(更多控制权)
  • 由于使用显式API,因此更加冗长(可以对接口进行编码)
  • 可以解析损坏的HTML
  • 允许您在XPath查询中使用PHP函数

这两个都是基于libxml的,并且可以受libxml函数的某些扩展影响


就个人而言
,我不太喜欢SimpleXml。那是因为我不喜欢隐式访问节点,例如

$foo->bar[1]->baz['attribute']
。它将实际的XML结构与编程接口联系在一起。一切都是单节点类型也有些不直观,因为SimpleXmlElement的行为根据其内容而神奇地改变。

例如,当您拥有

<foobar="1"/>
的对象转储
/foo/@bar
将与的对象转储相同时,对
/foo
它们进行回显将显示不同的结果。而且,由于它们都是SimpleXml元素,因此可以在它们上调用相同的方法,但是只有在SimpleXmlElement支持它的情况下才会应用它们,例如,尝试
$el->addAttribute('foo','bar')
在第一个SimpleXmlElement上执行任何操作。现在,您当然可以将属性添加到“属性节点”,这是正确的,但重点是,属性节点首先不会公开该方法。

但这只是我的2分。 下定决心 :)


旁注中
,没有两个解析器,但是在PHP中有两个解析器。SimpleXml和DOM只是将文档解析为树形结构的两个。其他的是基于拉或事件的解析器/读取器/写入器。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443152.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号