2012-07-09 6 views
14

Desidero modificare il valore dell'attributo di un tag con PHP DOMDocument.Modifica valore attributo tag con PHP DOMDocument

Per esempio, dire che abbiamo questa linea di codice HTML:

<a href="http://foo.bar/">Click here</a> 

ho caricare il codice di cui sopra in PHP come segue:

$dom = new domDocument; 
$dom->loadHTML('<a href="http://foo.bar/">Click here</a>'); 

voglio cambiare il valore "href" a " http://google.com/ "utilizzando l'estensione DOMDocument di PHP. È possibile?

Grazie per l'aiuto come sempre!

risposta

21
$dom = new DOMDocument(); 
$dom->loadHTML('<a href="http://foo.bar/">Click here</a>'); 

foreach ($dom->getElementsByTagName('a') as $item) { 

    $item->setAttribute('href', 'http://google.com/'); 
    echo $dom->saveHTML(); 
    exit; 
} 
+0

Grazie sooo molto! – apparatix

4
$dom = new domDocument; 
$dom->loadHTML('<a href="http://foo.bar/">Click here</a>'); 

$elements = $dom->getElementsByTagName('a'); 

if($elements instanceof DOMNodeList) 
    foreach($elements as $domElement) 
     $domElement->setAttribute('href', 'http://www.google.com/'); 
+1

In suvallato perché hai incluso un controllo del tipo, ma per favore ricorda che nei linguaggi C-like è una buona idea * sempre * racchiudere il corpo di un condizionale o di un ciclo in parentesi graffe, anche se è solo una istruzione (poiché se successivamente aggiungi un'altra affermazione e dimentica di aggiungere le parentesi * sembrerà * come se fosse parte del corpo quando non lo è, questo può causare bug davvero difficili da trovare). – ebohlman

+0

Ok. Grazie – iDexter

+0

Il controllo del tipo è in realtà abbastanza inutile qui; 'DOMDocument :: getElementsByTagName' restituisce sempre un' DOMNodeList' quindi il blocco 'if' verrà sempre eseguito. – cspray