2017-04-24 2 views
0

J'ai posté une question SO: PHP DOM traverse HTML nodes and childnodePHP noeuds DOM HTML pour traverse balise de lien hypertexte

Quelqu'un m'a gentiment donné une solution pour cela. Cependant, les données que je suis analyse a en fait plusieurs balises de lien hypertexte comme indiqué ci-dessous:

<tr> 
<td>DATA 1</td> 
<td><a href="12345" target="_top">DATA 2</a></td> 
<td><a href="other_link">DATA 3</a></td> 
</tr> 

Ma sortie désirée est de sélectionner uniquement les href (par exemple « 12345 ») pour la balise de lien hypertexte qui a une cible "_top".

Mon code actuel sélectionne toutes les étiquettes de lien hypertexte dans la table.

foreach ($dom->getElementsByTagName('td') as $node) { 
    foreach ($node->getElementsByTagName('a') as $node){ 
     $array_href[]= $node->getAttribute('href'); 
    } 
$array_data[] = $node->nodeValue; 
} 

Répondre

0

target est juste un autre attribut, comme href. Obtenez la valeur et comparer:

foreach ($node->getElementsByTagName('a') as $node){ 
    if ($node->getAttribute('target') === '_top') { 
     $array_href[]= $node->getAttribute('href'); 
    } 
} 
+0

C'est génial! Merci Matt – Jeanclaude

0

Tout en boucle à travers les a balises, créez un nouveau if qui vérifie si le nœud contient l'attribut target avec la valeur de _new, i.e. .:

foreach ($dom->getElementsByTagName('td') as $node) { 
    foreach ($node->getElementsByTagName('a') as $node){ 
     if ($node->getAttribute('target') == '_top') { 
      $array_href[] = $node->getAttribute('href'); 
     } 
    } 
    $array_data[] = $node->nodeValue; 
}