簡體   English   中英

使用php加速xml解析

[英]speed up xml parse with php

嗨,我有一個xml文件,其中包含大約12,000條記錄。 我編寫了代碼並且工作正常,只需要一段時間來解析xml文件並返回內容。 有沒有辦法加速這個過程?

我的代碼:

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

} 
?>

XML文件(只有一個演示在那里不能鏈接所有大聲笑):

<?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>

DOM方法適用於小型數據集,因為所有XML結構都被解析並放入內存中。

在您的情況下,您應該在解析大型XML文件時使用SAX方法,因為XML文件是逐行讀取的,而不是一次讀取所有內容。

谷歌有一些例子: https//www.google.lv/search?q = php + SAX + XML

答案很大程度上取決於數據。 一些可能的解決方案是將數據移動到像MySQL這樣的關系數據庫中,或者將數據規范化為CSV格式,這種格式更容易解析,占用更少的空間,並且可以逐行讀取。

我並不是特別熟悉PHP實現,但是在使用Xerces的C ++中使用以下方法我已經看到了針對您的場景的巨大性能改進。

我沒有按名稱請求所有元素並等待返回整個NodeList,而是發現在根節點下獲取第一個子節點然后獲取NextSibling節點要快得多。 使用每個兄弟作為新節點,您將繼續獲取NextSibling,直到沒有剩余。

希望這提供了PHP的性能改進,類似於它在C ++中的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM