Usare PHP per ottenere DOM Element

Sto faticando molto a capire come utilizzare l’object DOMElement in PHP. Ho trovato questo codice, ma non sono sicuro che sia applicabile a me:

$dom = new DOMDocument(); $dom->loadHTML("index.php"); $div = $dom->getElementsByTagName('div'); foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; echo "Attribute '$name' :: '$value'
"; }

Fondamentalmente quello di cui ho bisogno è cercare nel DOM un element con un particolare id , dopo di che ho bisogno di estrarre un attribute non standard (cioè uno che ho inventato e messo su JS) in modo che possa vedere il valore di quello . Il motivo è che ho bisogno di un pezzo da $_GET e di un pezzo che si trova nell’HTML basato su un reindirizzamento. Se qualcuno potesse semplicemente spiegare come usare DOMDocument per questo scopo, sarebbe utile. Sto davvero lottando per capire cosa sta succedendo e come implementarlo correttamente, perché chiaramente non sto facendo bene.

EDIT (dove sono basato sul commento):

Questa è la mia code line 4-26 per riferimento:

 
load("index.php"); $divs = $dom->getElementsByTagName('div'); foreach ($divs as $div) { foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; echo "Attribute '$name' :: '$value'
"; } } $div = $dom->getElementById('currentLocation'); $attr = $div->getAttribute('srckey'); echo "

{$attr}"; ?>

Ecco il messaggio di errore che sto ricevendo:

 Warning: DOMDocument::load() [domdocument.load]: Extra content at the end of the document in ../public_html/index.php, line: 26 in ../public_html/index.php on line 10 Fatal error: Call to a member function getAttribute() on a non-object in ../public_html/index.php on line 21 

getElementsByTagName ti restituisce una lista di elementi, quindi prima devi scorrere gli elementi, quindi i loro attributi.

 $divs = $dom->getElementsByTagName('div'); foreach ($divs as $div) { foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; echo "Attribute '$name' :: '$value'
"; } }

Nel tuo caso, hai detto che avevi bisogno di un ID specifico. Quelli dovrebbero essere unici, quindi per farlo, puoi usare (nota che getElementById potrebbe non funzionare a meno che tu non chiami prima $dom->validate() ):

 $div = $dom->getElementById('divID'); 

Quindi per ottenere il tuo attributo:

 $attr = $div->getAttribute('customAttr'); 

EDIT : $dom->loadHTML legge solo il contenuto del file, non li esegue. index.php non verrà eseguito in questo modo. Potrebbe essere necessario fare qualcosa come:

 $dom->loadHTML(file_get_contents('http://localhost/index.php')) 

Non avrai accesso all’HTML se il reindirizzamento proviene da un server esterno. Lasciatemelo dire così: il DOM non esiste al punto che stai cercando di analizzarlo. Quello che puoi fare è passare il testo a un parser DOM e quindi manipolare gli elementi in quel modo. O il modo migliore sarebbe aggiungerlo come un’altra variabile GET.

EDIT: Sei anche consapevole del fatto che il client può modificare l’HTML e farlo passare quello che vogliono? (Usando uno strumento come Firebug)