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>';
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
        )
 
)
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