[DOM] Impossible de parser correctement table html domelement
Bonjour, j'aimerais bien parser une simple table html.
Cependant j'ai un petit problème, d'habitude je parse des fichier xml que je créé moi même avec de bonne balise mais là j'ai pas le choix que de m'adapter au code html que je télécharge d'une page.
Le problème c'est que j'arrive pas a créé une variable result avec les element en dehors du span que je parcoure.
J'ai refais un petit code qui résume bien mon problème.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
$html = '<table id="campagne">
<tr>
<td><span class="date">27/10</span></td>
<td><span class="time">16h</span></td>
<td>
Pomme
<span>Poire</span>
Cerise
<span>Peche</span>
<span class="intru">voiture</span>
banane
</td>
</tr>
<tr>
<td><span class="date">27/10</span></td>
<td><span class="time">16h</span></td>
<td>
Pomme
<span>Poire</span>
Cerise
<span>Peche</span>
<span class="intru">voiture</span>
banane
</td>
</tr>
</table>';
$dom = new DOMDocument();
$dom->loadHTML($html);
$res = $dom->getElementById('campagne'); // selectionne le bon table
$res = $res->getElementsByTagName('tr'); // le tr de table
$i=0; $result = array(); // pour le resulta final
foreach($res as $td) {
$span = $td->getElementsByTagName('span');
$result[$i]['data'] = '';
foreach ($span as $cell) {
$class = $cell->getAttribute('class');
if ($class != "intru") {
echo 'node: '.$cell->nodeValue.'<br />';
if (($class == 'date') || ($class == 'time')) {
$result[$i][$class] = $cell->nodeValue;
}
else $result[$i]['data'] .= $cell->nodeValue."; ";
}
echo 'TEST: '.$cell->parentNode->nodeValue.'<br />';
}
echo '<hr />';
$i++;
}
echo '<pre>';
print_r($result);
echo '</pre>'; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| node: 27/10
TEST: 27/10
node: 16h
TEST: 16h
node: Poire
TEST: Pomme Poire Cerise Peche voiture banane
node: Peche
TEST: Pomme Poire Cerise Peche voiture banane
TEST: Pomme Poire Cerise Peche voiture banane
Array
(
[0] => Array
(
[data] => Poire; Peche;
[date] => 27/10
[time] => 16h
)
[1] => Array
(
[data] => Poire; Peche;
[date] => 27/10
[time] => 16h
)
) |
J'arrive a mettre 'date' et 'time' sans problème ainsi que 'data' dans l'array avec les element dom dans le span du td. Mais pour pomme cerise banane qui et en dehors du span c'est autre chose.
alors j'ai essayer pour tester $cell->parentNode->nodeValue qui retourne
"Pomme Poire Cerise Peche voiture banane"
Sa me renvois le contenu du tr sans balise ainsi qu'avec le span class="intru" que je voudrais exclure pour pas avoir voiture dans la liste des fruit.
J'aimerais bien avoir dans data -> Pomme Poire Cerise Peche banane.
merci d'avance