我喜欢XMLReader类,因为它的简单性和速度。但我喜欢xml_parse相关函数,因为它更好地允许错误恢复。如果XMLReader类会抛出无效实体引用之类的异常,而不仅仅发出警告,那就太好了。
答案 0 :(得分:4)
如果可以,我会避免使用SimpleXML。虽然通过避免大量“丑陋”的代码看起来很诱人,但正如其名称所暗示的那样:简单。例如,它无法解决这个问题:
<p>
Here is <strong>a very simple</strong> XML document.
</p>
咬紧牙关,转到DOM功能。它的力量远远超过了一点点额外的复杂性。如果您对Javascript中的DOM操作非常熟悉,那么您可以在这个库中感受到它。
答案 1 :(得分:3)
SimpleXML似乎为我做好了。
答案 2 :(得分:2)
SimpleXML和DOM无缝地协同工作,因此您可以使用与SimpleXML或DOM交互的相同XML。
例如:
$simplexml = simplexml_load_string("<xml></xml>");
$simplexml->simple = "it is simple.";
$domxml = dom_import_simplexml($simplexml);
$node = $domxml->ownerDocument->createElement("dom", "yes, with DOM too.");
$domxml->ownerDocument->firstChild->appendChild($node);
echo (string)$simplexml->dom;
您将得到结果:
"yes, with DOM too."
因为当你导入对象(无论是simplexml还是dom)时,它通过引用使用相同的下划线PHP对象。
当我试图通过扩展/包装对象来纠正SimpleXML中的一些错误时,我想到了这一点。
有关示例,请参阅http://code.google.com/p/blibrary/source/browse/trunk/classes/bXml.class.inc。
这对于小块的XML(-2MB)非常有用,因为DOM / SimpleXML将整个文档拉入内存并带来一些额外的开销(想想x2或x3)。对于大型XML块(+ 2MB),您将需要使用XMLReader / XMLWriter来解析SAX样式,并且内存开销较低。我已经使用XMLReader / XMLWriter成功使用了14MB +文档。
答案 3 :(得分:1)
使用PHP5解析XML文件时至少有四个选项。最佳选择取决于XML文件的复杂性和大小。
在IBM developerWorks上有一篇非常好的由三部分组成的系列文章“XML for PHP developers”。
“解析DOM,现在完全符合W3C标准,是一个熟悉的选项,是您选择复杂但相对较小的文档。 SimpleXML是基本的和不太大的XML文档的方法,而且比SAX更容易和更快的XMLReader是大型文档的首选流解析器。“
答案 4 :(得分:0)
我主要坚持使用SimpleXML,至少每当PHP5可用时。