DOMDocument vs SimpleXML

Code46

Erfahrenes Mitglied
Hallo Leute,

ich wollte mal etwas fragen bezüglich dieses DomDocument und SimpleXML. Ich benutze in einer meiner Codes DOM, jedoch läd er die Elem,ente sehr sehr langsam woran liegt das ?

Zustäzlich hatte ich bischen gegoogelt und gelesen das SimpleXML oder XMLReader viel schneller ist, doch habe es nicht hinbekommen von meinem Dom code auf simplexml umzuschreiben.

Würde mich freuen wenn mir jemand dabei behilflich sein könnte.

PHP:
  <?php
            $opts = array(
                'http' => array(
                    'method' => "GET",
                    'header' => "Accept-language: de\r\n" .
                    "Cookie: foo=bar\r\n" .
                    "Authorization: Basic " ."\r\n",
                    "Connection: close\r\n"
                )
            );

            $context = stream_context_create($opts);


            $xml_string = file_get_contents("http://services.mobile.de/1.0.0/ad/search?customerNumber=123456&page.size=100", false, $context);
            $dom = new DOMDocument;
            $dom->loadXML($xml_string);
            $result = $dom->getElementsByTagName('result');
            $list_features = array();
            $each_add = array();
            $ads = array();
            $xpath = new DOMXPath($dom);


            foreach ($result as $elem) {

                for ($i = 0; $i < $elem->getElementsByTagName('ad')->length; $i++) {

                    $item_url = $elem->getElementsByTagName('ad')->item($i)->getAttribute('url');
                    $each_add[] = $item_url;
                }
            }
            foreach ($each_add as $key => $value) {
                $xml_string = file_get_contents($value, false, $context);
                $dom = new DOMDocument;
                $dom->loadXML($xml_string);
                $items = $dom->getElementsByTagName('ad');
                $image = $dom->getElementsByTagName('images');
                $features = $dom->getElementsByTagName('features');

                foreach ($items as $elems) {
                    $list_features = array();

                    $make = $elems->getElementsByTagName('make')->item(0)->nodeValue;
                    $model = $elems->getElementsByTagName('model')->item(0)->nodeValue;
 
Ich habe das mal ausprobiert und es hat 2 sekunde gedauert. Ich glaube ich mache etwas falsch in meinen Loops ??? Habe 3 Forech loops kann es davon hängen ???
 
Kannst du irgendie schnellere Ladezeiten erzielen? Die Ladezeit hängt von der aktuellen Internetverbindung und anderen Dingen ab. Teste doch mal mit cURL oder wget über die Kommandozeile, ob das dort auch 2sec dauert.
 
Ich glaube ich mache etwas falsch in meinen Loops ?
Da hast du recht.
Du rufst z. B. getElementsByTagName('ad') mehrmals unnötig auf. Dadurch werden die Tags 'ad' immer wieder erneut gesucht. Du hast es sogar in der for-Schleife als Bedingung drinne (...ByTagName('ad)'->length). D. h. bei jedem Durchlauf der Schleife werden die Tags erneut gesucht!

Auf jeden Fall solltest du also die Ergebnisse der Tag-Suchergebnisse in Variablen zwischenspeichern.

Dein Vorhaben, spezifische Elemente zu finden und zu verarbeiten, ist wahrscheinlich einfacher mit XPath zu lösen. Schau dir das mal an ;)
 

Neue Beiträge

Zurück