2009-02-04 193 views
6

哪种解析PHP中的XML文件的最佳方式是?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 
} 

注: 这是两个我所知道的。如果有更多的练习I.

想知道哪种方法是最好的解析巨大的XML文件,也哪种方法最快不论方法需要实现

尺寸将是路从500KB到2MB不等。如果可能的话,解析器应该能够以最少的时间解析小文件和大文件,并且有良好的内存使用率。

+0

当我们说“巨大”时我们说话有多大?兆字节的价值? – 2009-02-04 20:20:04

回答

4

我已经开始使用XMLReader来解析XML文件。在做了一些Google搜索之后,发现它最好的方式来解析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,我们可以发现当前标签是开始标签还是结束标签,并根据需要进行必要的操作。

1

为了便于使用,我更喜欢simplexml_load_string。如果两者使用不同的解析文件的方法 - 处理速度可能取决于XML文件的格式 - 请在您自己的文件中尝试一下,看看哪个更适合您。

1

当我开发时,所有的XML都由PHP中的simpleXML处理。它很容易扩展,并在需要时覆盖方法。

+0

simpleXML并不适合扩展。您无法重写构造函数,也无法将属性添加到子类,因为它们被视为新节点。最好使用组合而不是继承,即'具有'simpleXML,而不是'simpleXML' – meouw 2009-02-04 22:12:27

2

如果你正在处理巨大的文件不解析它们。改为申请XSLT。这将为您节省大量的内存和处理时间。