Sta*_*ann 53 php simplexml domdocument
我无法理解为什么我们在PHP中需要2个XML解析器.
有人可以解释这两者之间的区别吗?
Gor*_*don 98
简而言之:
SimpleXML的
$root->foo->bar['attribute']
DOM
这两个都基于libxml,并且可以通过libxml函数在某种程度上受到影响
就个人而言,我不太喜欢SimpleXml.那是因为我不喜欢对节点的隐式访问,例如$foo->bar[1]->baz['attribute']
.它将实际的XML结构与编程接口联系起来.单节点类型的所有内容也有些不直观,因为SimpleXmlElement的行为根据其内容神奇地改变.
例如,当您拥有<foo bar="1"/>
的对象转储/foo/@bar
将与其相同时,/foo
但对其进行回显将打印出不同的结果.此外,因为它们都是SimpleXml元素,所以可以在它们上调用相同的方法,但只有在SimpleXmlElement支持它时才会应用它们,例如,尝试$el->addAttribute('foo', 'bar')
对第一个SimpleXmlElement执行任何操作都不会.当然,您无法向属性节点添加属性是正确的,但重点是,属性节点首先不会公开该方法.
但那只是我的2c.自己决定 :)
在旁注中,没有两个解析器,但在PHP中还有一些.SimpleXml和DOM只是将文档解析为树结构的两个.其他的是基于拉或基于事件的解析器/读者/编写者.
另见我的回答
Jos*_*vis 39
我将尽可能做出最短的答案,以便初学者可以轻松地将它拿走.我也为了简短而略微简化了一些事情.跳过那个夸大的TL; DR版本的答案的结尾.
DOM和SimpleXML 实际上不是两个不同的解析器.真正的解析器是libxml2,它由DOM和SimpleXML内部使用.所以DOM/SimpleXML只是两种使用相同解析器的方法,它们提供了将一个对象转换为另一个对象的方法.
SimpleXML旨在非常简单,因此它具有一小组功能,并且专注于读取和写入数据.也就是说,您可以轻松读取或写入XML文件,您可以更新某些值或删除一些节点(有一些限制!),就是这样.没有花哨的操作,并且您无法访问不太常见的节点类型.例如,SimpleXML无法创建CDATA部分,尽管它可以读取它们.
DOM提供了一个完整的DOM实现以及一些非标准方法,如appendXML.如果您习惯在Javascript中操作DOM,那么您将在PHP的DOM中找到完全相同的方法.你可以做什么基本上没有限制,它平均处理HTML.这种丰富功能的另一面是它比SimpleXML 更复杂,更冗长.
人们常常想/他们应该使用什么扩展来处理他们的XML或HTML内容.实际上选择很简单,因为开始时没有多少选择:
归档时间: |
|
查看次数: |
26040 次 |
最近记录: |