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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>';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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ) )
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
Partager