我无法理解为什么我们在PHP中需要2个XML解析器。
有人可以解释两者之间的区别吗?
简而言之:
SimpleXml
$root->foo->bar['attribute']
DOM
这两个都是基于libxml的,并且可以受libxml函数的某些扩展影响
就个人而言 ,我不太喜欢SimpleXml。那是因为我不喜欢隐式访问节点,例如$foo->bar[1]->baz['attribute']。它将实际的XML结构与编程接口联系在一起。一切都是单节点类型也有些不直观,因为SimpleXmlElement的行为根据其内容而神奇地改变。
$foo->bar[1]->baz['attribute']
例如,当您拥有<foo bar="1"/>的对象转储/foo/@bar将与的对象转储相同时,对/foo它们进行回显将显示不同的结果。而且,由于它们都是SimpleXml元素,因此可以在它们上调用相同的方法,但是只有在SimpleXmlElement支持它的情况下才会应用它们,例如,尝试$el->addAttribute('foo', 'bar')在第一个SimpleXmlElement上执行任何操作。现在,您当然可以将属性添加到“属性节点”,这是正确的,但重点是,属性节点首先不会公开该方法。
<foo bar="1"/>
/foo/@bar
/foo
$el->addAttribute('foo', 'bar')
但这只是我的2分。 下定决心 :)
在 旁注中 ,没有两个解析器,但是在PHP中有两个解析器。SimpleXml和DOM只是将文档解析为树形结构的两个。其他的是基于拉或事件的解析器/读取器/写入器。