如果使用 PHP 解析 XML 的話,那么常見的選擇有如下幾種:DOM、SimpleXML、XMLReader。如果要解析 XML 大文件的話,那么首先要排除的是 DOM,因為使用 DOM 的話,需要把整個文件全部加載才能解析,效率堪憂,相比較而言,SimpleXML 和 XMLReader 更好些,SimpleXML 相對簡單,而 XMLReader 相對復雜,但是它可以自定義解析整個過程,特別是流式解析的特點讓其效率更高。
下面我以一個 XML 大文件例子來對比一下 SimpleXML 和 XMLReader 的用法:
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
先看看用 SimpleXML 的話怎么搞:
$values = simplexml_load_file('file.xml');
foreach ($values as $value) {
var_dump($value);
}
?>
在看看用 XMLReader 的話怎么搞:
$xml = new XMLReader();
$xml->open('file.xml');
for ($name = null, $value = []; $xml->read(); null) {
if ($xml->nodeType == XMLReader::ELEMENT) {
$name = $xml->name;
if ($name == 'certificate') {
if ($value) {
var_dump($value);
}
$value = [];
continue;
}
}
if ($xml->nodeType == XMLReader::TEXT) {
if ($name) {
$value[$name] = $xml->value;
}
}
}
?>
在本例中,XML 文件有幾百萬行,XMLReader 的效率是 SimpleXML 的兩倍左右。
了解了相關知識,讓我們看看如何選擇合適的 XML 解析方法:如果規則比較復雜的話, 比如要查詢當前節點的上下文,那么 DOM 是合理的選擇;如果 XML 體積比較大的話,那么 XMLReader 是效率更高。不過如果沒有特殊需求的話,那么盡量選擇 SimpleXML,畢竟它用起來更簡單。