Lieferantenseite Crawlen, DomXPath

Hi,
ein Liefererant hat keine Excel-Listen seiner Produkte, aber wir dürfen seine Website crawlen.

Das klappt auch ganz gut mit Curl und anschliessendem DomXPath->query() .
An zwei Stellen komme ich nicht weiter.

Der 1. HTML-Node sieht so aus . Den Wert [10.00; RR=Ja; Bsp1] möchte ich als string oder array haben:

<div class="beispielName">
  <span class="value">
    <span>[10.00; RR=Ja; Bsp1]</span>
  </span>
</div>

Der 2. HTML-Node sieht so aus. Den Wert was:Irgendwas möchte ich als string oder array haben:

<div class="beispielName">
  <span class="value">
    <span>was:Irgendwas</span>
  </span>
</div>

Ich bekomme aber keinen Wert ausgelesen. Es ist auch der einzige Node der so heisst.

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML(mb_convert_encoding($htmlstring, 'HTML-ENTITIES', 'UTF-8'));

$finder = new DomXPath($dom);
/*dieser Query gibt nichts zurück*/
$finder->query("//*[contains(@class, 'beispielName')]//*[contains(@class, 'value')]");
/*dieser Query gibt nichts zurück*/
$finder->query("//*[contains(@class, 'beispielName')]//*[contains(@class, 'value')]")->item(0)->nodeValue;

Liegt es an Doppelpunkt oder an den Eckigen Klammern? Bei allen Knoten wo das nicht vorkommt klappt alles wunderbar.

Danke und Gruss.

Das ist jetzt aber keine Shopware-Frage mehr :wink:

Doppelpunkt hat in XML eine spezielle Bedeutung, und mit XPath werden die Daten ja als XML interpretiert. Versuch mal, vorher diese Doppelpunkte innerhalb der HTML Tags durch ein XML-kompatibles Encoding, also &#58; zu ersetzen, bevor Du XPath drauf loslässt.

LG Phil

1 Like