用php加速xml解析

用php加速xml解析,php,parsing,xmldom,Php,Parsing,Xmldom,嗨,我有一个xml文件,里面有大约12000条记录。我已经编写了代码,它工作得很好,只是需要一段时间来解析xml文件并返回内容。有没有办法加快这一进程 我的代码: <?php $dom = new DOMDocument(); $dom->load('comics.xml'); foreach ($dom->getElementsByTagName('record') as $entry) { $title = $entry->getElementsByTa

嗨,我有一个xml文件,里面有大约12000条记录。我已经编写了代码,它工作得很好,只是需要一段时间来解析xml文件并返回内容。有没有办法加快这一进程

我的代码:

<?php 
$dom = new DOMDocument(); 
$dom->load('comics.xml'); 
foreach ($dom->getElementsByTagName('record') as $entry) 
{   
$title = $entry->getElementsByTagName('title')->item(0)->textContent;   
echo $title;   

} 
?>
getElementsByTagName('record')作为$entry)
{   
$title=$entry->getElementsByTagName('title')->item(0)->textContent;
echo$标题;
} 
?>
XML文件(其中只有一个演示无法链接em所有lol):


1.
991639a0-7cf6-4a34-a863-4aab8ac2921d
惊奇漫画
6109716
铁人v1101
不为人知
2012-04-15T18:49:22-07:00
2012-04-15T18:49:22-07:00
M:/Comics/Unknown/Iron Man v1 101(1)/cover.jpg
M:/Comics/Unknown/IronManv1101(1)/IronManv1101-Unknown.zip

答案在很大程度上取决于数据。一些可能的解决方案是将数据移动到像MySQL这样的关系数据库中,或者将数据规范化为像CSV这样的格式,这种格式更容易解析,占用更少的空间,并且可以逐行读取。

我对PHP实现不太熟悉,然而,在C++中使用XECES使用下面的方法,我看到了您的方案的巨大性能改进。 我发现只获取根节点下的第一个子节点,然后获取下一个sibling节点要快得多,而不是按名称请求所有元素并等待返回整个NodeList。使用每个同级节点作为新节点,您将不断获得下一个同级节点,直到没有剩余节点为止


希望这能在PHP中提供性能上的改进,类似于C++中的性能。<> P>强> DOM<强>方法对小数据集很有好处,因为所有XML结构都被解析并放入内存。 在您的情况下,在解析大型XML文件时应该使用SAX方法,因为XML文件是逐行读取的,而不是一次读取所有内容


谷歌有一些例子:

第1步,找出到底是什么在变慢。关键词:profiling.您能尝试使用xpath并比较结果吗?我认为它可以更快,但我以前从未测试过。使用。它将数据分成块,您需要手动(基于事件)解析数据,但它比DOMDocument或SimpleXML(没有内部树构建并插入内存)效率更高。是的,我希望可以避免将信息存储在数据库中,但看起来这可能是我的最佳解决方案。@Rackmup420您看到我的答案了吗\
<?xml version='1.0' encoding='utf-8'?>
<calibredb>
  <record>
    <id>1</id>
    <uuid>991639a0-7cf6-4a34-a863-4aab8ac2921d</uuid>
    <publisher>Marvel Comics</publisher>
    <size>6109716</size>
    <title sort="Iron Man v1 101">Iron Man v1 101</title>
    <authors sort="Unknown">
      <author>Unknown</author>
    </authors>
    <timestamp>2012-04-15T18:49:22-07:00</timestamp>
    <pubdate>2012-04-15T18:49:22-07:00</pubdate>
    <cover>M:/Comics/Unknown/Iron Man v1 101 (1)/cover.jpg</cover>
    <formats>
      <format>M:/Comics/Unknown/Iron Man v1 101 (1)/Iron Man v1 101 - Unknown.zip</format>
    </formats>
  </record>
  </calibredb>