PHP XML解析

6

什么是在PHP中解析XML文件的最佳方式?

第一种方式:
使用DOM对象。

//code
$dom = new DOMDocument();
$dom->load("xml.xml");

$root = $dom->getElementsByTagName("tag");
foreach($root as $tag)
{
$subChild = $root->getElementsByTagName("child");

// extract values and loop again if needed
}

第二步
使用simplexml_load方法

// code
$xml = simplexml_load_string("xml.xml");
$root = $xml->root;
foreach($root as $tag)
{
$subChild = $tag->child;
// extract values and loop again if needed
}

注意: 这是我所知道的两种方法。如果还有其他的,请填写。 想知道解析大型XML文件的最佳方法以及无论如何实现该方法,哪种方法最快。 文件大小将从500KB到2MB不等。解析器应该能够在最短的时间内解析小型和大型文件,并尽可能地使用较少的内存。

当我们说“巨大”时,我们所指的规模有多大?以兆字节为单位? - Peter Bailey
5个回答

4

这取决于你要处理的文档,但是通常情况下XMLReader比simplexml和DOM都要快(http://blog.liip.ch/archive/2004/05/10/processing_large_xml_documents_with_php.html)。不过,就我个人而言,我从未使用过XMLReader,并且通常根据是否需要进行编辑来决定使用哪种方法:

  • 如果只是读取文档,则使用simplexml
  • 如果修改DOM并将其保存回去,则使用DOM

你也可以在simplexml和DOM之间转换对象。


4

我已经开始使用XMLReader来解析XML文件。在做了一些谷歌搜索后,发现这是解析XML文件的最佳方式,因为它不会将整个XML文件加载到内存中。举个例子,如果我的XML文件大小为5 MB,在使用XMLReader解析时,不会浪费5MB的内存。

//usage
$xml = new XMLReader();
$xml->XML($xmlString);
while($xml->read)
{
if($xml->localName == 'Something') // check if tag name equals something
{
//do something
}
}

使用XML Reader,我们可以找出当前标签是开放标签还是闭合标签,并根据需要进行必要的操作。

2
如果您正在处理大文件,请勿解析它们。请使用XSLT进行处理,这将节省大量的内存和处理时间。XSLT与解析相比更加高效。

1

我更喜欢使用simplexml_load_string,因为它更易于使用。处理速度可能取决于XML文件的格式,如果两种方法使用不同的解析方式 - 请在自己的文件上尝试并查看哪种方法更适合您。


1

现在我开发时所有的XML都是由PHP中的simpleXML处理的。它很容易扩展和在需要时重写方法。


simpleXML并不适合扩展。您无法覆盖构造函数,也无法向子类添加属性,因为它们被视为新节点。最好使用组合而不是继承,即“具有”simpleXML而不是“是”simpleXML。 - meouw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接