2009-02-04 187 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。這將爲您節省大量的內存和處理時間。