2017-04-21 4 views
0

J'utilise un code pour choisir tous les <td> balises d'une page HTML:PHP DOM traverse les noeuds HTML et childNode

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('td') as $node) { 
$array_data[ ] = $node->nodeValue; 
} 

Ce stocke l'amende de données dans mon tableau.

Les données html être regardé est:

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

Les $array_data retours:

Array([0])=>DATA 1 [1]=>DATA 2 [2]=> DATA 3) 

Ma sortie désirée est d'obtenir le code de la balise <a> qui est associée à la sur la page . sortie souhaitée:

Array([0])=>DATA 1 [1]=>12345 [2]=>DATA 2 [3]=> DATA 3)

Je pense que <a> serait appelé nœud enfant, je suis très nouveau pour travailler avec DOM désolé si cela semble une question stupide.

J'ai lu lien: Using PHP dom to get child elements

Je l'ai utilisé ce code pour choisir le href:

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

Toute aide ou pointeurs pour d'autres matériel de lecture serait grandement appreicated!
Merci

+0

J'ai posté réponse à la résolution de votre problème. Alors pourquoi avez-vous changé de question? Quel est votre problème? – Mohammad

+0

Merci pour votre solution Mohammed. Je lisais d'autres publications de SO pour trouver une solution en même temps. Une fois que j'ai trouvé quelque chose sur le post SO, j'ai posté le code mis à jour dans ma question. – Jeanclaude

Répondre

0

Vous devez vérifier td a a enfant. Sélectionnez la balise d'ancrage en utilisant getElementsByTagName() et vérifiez que la sélection a du contenu en utilisant la propriété length. Si le td a une ancre dans l'enfant, utilisez getAttribute() pour obtenir l'attribut href.

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('td') as $node) { 
    $nodeAnchor = $node->getElementsByTagName("a"); 
    if ($nodeAnchor->length) 
     $array_data[] = $nodeAnchor->item(0)->getAttribute("href"); 
    $array_data[] = $node->nodeValue; 
} 

Voir demo