xvital

Nie je to síce priamo Laravel, ale tento tip na knižnicu by sa mohol hodiť mnohým z vás, ktorý sa dostanete do styku s väčšími XML dokumentami. Jej implementácia/použitie je veľmi jednoduché.

Nedávno som dostal za úlohu spracovať asi stovku produktových XML feedov. Drvivú väčšinu z nich nemal problém Simple XML spracovať, pretože neboli tak rozsiahle, aby sa nevošli do pamäte. Niekoľko feedov však obsahovalo 100k+ záznamov a to už pretekalo.

Na spracovanie som využil XML String Streamer, ktorý prechádza XML dokument postupne, po jednotlivých uzloch stromu nastavenej úrovne. Do pamäte sa vďaka tomu načítava práve jeden uzol, takže pamäťové nároky sú úplne minimálne.

Príklad z dokumentácie.

XML

<?xml version="1.0" encoding="UTF-8"?>
<gigantic>
    <customer>
        <firstName>Jane</firstName>
        <lastName>Doe</lastName>
    </customer>
    ...
</gigantic>

Vytvorenie Streamera a parsovanie dokumentu po uzloch

$streamer = Prewk\XmlStringStreamer::createStringWalkerParser("gigantic.xml");

while ($node = $streamer->getNode()) {
    $simpleXmlNode = simplexml_load_string($node);
    echo (string)$simpleXmlNode->firstName;
}

K dispozícii sú dva parsery (StringWalker, UniqueNode) a tri možnosti, ako získať dáta:

  1. Stream/File pre čítanie súborov z disku
  2. Stream/Stdin pre čítanie zo štandardného konzolového vstupu STDIN
  3. Stream/Guzzle pre stream prostredníctvom HTTP pomocou knižnice Guzzle.

Knižnica ponúka aj pomerne široké možnosti konfigurácie.

Viac informácií nájdete priamo na githube projektu: xml-string-streamer

Ešte nie si členom CZ/SK Laravel komunity?

To možeš ľahko zmeniť. Registrácia je zdarma a ako registrovaný člen získaš množstvo výhod. Prečítaj si prečo by si mal byť členom.

Prihlásiť sa Zaregistrovať