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 不等。如果可能的话,解析器应该能够在最少的时间内解析大文件和小文件,并具有良好的内存使用率。

4

5 回答 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 之间转换对象。

于 2009-02-04T20:47:45.863 回答
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,我们可以找到当前标签是开始标签还是结束标签,并根据需要进行必要的操作。

于 2009-02-06T07:48:55.713 回答
2

如果您正在处理文件,请不要解析它们。改为应用XSLT 。这将为您节省大量内存和处理时间。

于 2009-02-05T12:25:52.083 回答
1

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

于 2009-02-04T20:29:05.123 回答
1

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

于 2009-02-04T21:35:38.030 回答