PHP HTML DomDocument getElementById Probleme

7

Ein wenig neu in PHP, das hier analysiert, aber ich kann nicht scheinen, dass DomDocument von PHP zurückkommt, was eindeutig ein identifizierbarer Knoten ist. Der geladene HTML-Code kommt aus dem Internet, kann also nicht unbedingt die XML-Konformität garantieren, aber ich versuche Folgendes:

%Vor%

Obwohl ich keinen Fehler erhalte, erhalte ich nur folgendes als Ausgabe:

%Vor%

Sollte ich das <b> -Tag nicht finden können, da es tatsächlich eine ID hat?

    
Jé Queue 02.08.2010, 21:31
quelle

2 Antworten

17

Das Handbuch erklärt warum:

  

Damit diese Funktion funktioniert, müssen Sie entweder einige ID-Attribute mit DOMElement- & gt; setIdAttribute () oder eine DTD, die ein Attribut vom Typ ID definiert, setzen. Im letzteren Fall müssen Sie Ihr Dokument mit DOMDocument- & gt; validate () oder DOMDocument- & gt; validateOnParse validieren, bevor Sie diese Funktion verwenden.

Auf jeden Fall, gehen Sie für gültige HTML & amp; eine DTD bereitstellen.

Schnellkorrekturen:

  1. Rufen Sie $dom->validate(); auf und fügen Sie die Fehler hinzu (oder beheben Sie diese), danach können Sie $dom->getElementById() verwenden, ungeachtet der Fehler aus irgendeinem Grund.
  2. Verwenden Sie XPath, wenn Sie nicht glauben wollen: $x = new DOMXPath($dom); $el = $x->query("//*[@id='bid']")->item(0);
  3. Kommen wir mal zum Nachdenken: Wenn Sie validateOnParse nur auf setzen, bevor das HTML geladen wird, würde das auch funktionieren; P

.

%Vor%

Gibt 'Welt' hier aus.

    
Wrikken 02.08.2010, 21:49
quelle
3

Nun, Sie sollten überprüfen, ob $dom->loadHTML($html); wahr (Erfolg) zurückgibt und ich würde

versuchen %Vor%

für die Ausgabe, um eine Ahnung zu bekommen, was falsch sein könnte.

BEARBEITEN: Ссылка - es scheint, dass DomDocument XPath intern verwendet.

Beispiel:

%Vor%     
Martin Vseticka 02.08.2010 21:48
quelle

Tags und Links