Proč raději používat DOMDocument než SimpleXML

| Programování
Úvodní obrázek k článku - Proč raději používat DOMDocument než SimpleXML

Jak DOMDocument tak i SimpleXML používají shodný parser libxml2. Z důvodu použití stejného parseru jsou obě knihovny na zpracování stejně rychlé. 

SimpleXML

Je možné jej využit pro zpracování jednoduchých XML souborů. Jeho API je velmi omezené, nicméně umožňuje jednodušší práci s uzly. Na validaci XML rovnou zapomeňte. Osobně se mi nelíbí magický přístup k atributu. Dále co bych chtěl podotknout je, že u SimpleXML můžete také zapomenout na vnořování dat do CDATA, nicméně pozitivní je, že CDATA SimpleXML přečíst dokáže.

Výpis pomocí SimpleXML poté může vypadat například takto:

<?php

$xmlStr = <<<XML
<?xml version='1.0' standalone='yes'?>
<items>
    <item>Demo</item>
</items>
XML;

$xml = new SimpleXMLElement($xmlStr);
echo $xml->item[0];

?>

 

DOMDocument

Oproti SimpleXML je DOMDocument určitě složitější na naučení. Nicméně DOMDocument dokáže zpracovat všechny XML dokumenty. A mezi XML dokumenty které dokáže zpracovat lze zařadit i HTML dokument. Jeho API je mnohem podrobnější a dokáže tedy pracovat více do hloubky. Dále dokáže analyzovat i chybné XML soubory. Co si osobně velice chválím je kromě základní validace i validaci oproti relaxNG schématu. Rád také pracuji s XPath které nebízí. Příjde mi že práce s XPath je více efektivnější než postupné parsování pomocí klasického API.

Výpis pomocí DOMDocument poté může vypadat například takto:

<?php

$xmlStr = <<<XML
<?xml version='1.0' standalone='yes'?>
<items>
    <item>Demo</item>
</items>
XML;

$xml = new DOMDocument();
$xml->loadXML($xmlStr);

// Přístup pomocí XPath
$xpath = new DOMXPath($xml);
$query = $xpath->query('/items/item');
echo $query->item(0)->nodeValue;

// Přístup pomocí API
$item = $xml->getElementsByTagName('item');
echo $item->item(0)->nodeValue;

?>

 

XMLReader

Jedná se o dost komplikovaný nástroj který má stejné výhody jako DOMDocument, nicméně jeho využití z důvodu složitosti raději zvažte. Jeho hlavní výhodou jsou velmi malé paměťové nároky které ovšem vyváží velkou složitostí API.

Podobné články