Bonjour 'a tous,
j'ai un message comme ceci
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
<balise0>
<balise2>
  <balise1>   
    <balise3>    
      <balise4>1</balise4>   
      <balise5>SV</balise5>   
    </balise3>   
  </balise1>    
  <balise1>    
    <balise3>    
      <balise4>0</balise4>   
      <balise5>TV</balise5>    
    </balise3>    
  </balise1>   
  <balise6>  
    <balise7>ETA</balise7>  
  </balise6>
  <balise12>   
    <balise8>   
      <balise9>TP</balise9>   
    </balise8>    
    <balise10>  
      <balise11>239</balise11>  
    </balise10>   
  </balise12> 
</balise2>
</balise0>
que je mappe avec sa structure, voici mon code:

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
<?php
 
$docStruct = new DomDocument;
$docStruct->formatOutput = true;
$docStruct->preserveWhiteSpace=false;
$docStruct->load('docStruct.xml');
 
 
 
$xpathS = new DOMXpath($docStruct);	
 
$docEx = new DomDocument;
$docEx->formatOutput = true;
$docEx->preserveWhiteSpace=false;
$docEx->load('docEx.xml');
$xpathE = new DOMXpath($docEx);
 
 
$interface=$docStruct->getElementsByTagName('INTERFACE');
$arbre = $interface->item(0);		
 
$Smessages = $docStruct->getElementsByTagName('MESSAGE');
global $Smessage;
$Emessages = $docEx->getElementsByTagName('message');
echo pars_message('STRUCTfinal2.html');
 
 
function result_pars_message(){
	$resultat = '';
	global $interface, $Smessage, $Emessages, $tree;
	foreach ($interface as $tree) {
		$tmp=$Smessage->getAttribute('TAG');
 
		$result_pars=child_pars($Smessage, $Emessages->item(0));
		$resultat= '<html><link rel="stylesheet" type="text/css" href="style.css" /><body><h2>Message:'.$Smessage->getAttribute('TAG').'</h2><p class="message_desc">'.$Smessage->getAttribute('NAME').'</p>'.$result_pars."</body></html>";
 
	return $resultat;
	}
}
 
function pars_message($document2){
	global $interface, $Emessages, $Smessages, $Smessage ;
	foreach ($Smessages as $Smessage) {	
		if ($Smessage->getAttribute('TAG')==$Emessages->item(0)->getAttribute('type') && $Smessage->getAttribute('VERSION')==$Emessages->item(0)->getAttribute('version') && $Smessage->getAttribute('RELEASE')==$Emessages->item(0)->getAttribute('release')){	
			$resultat=result_pars_message();
			$docStruct2 = new DomDocument;
			$handle = fopen($document2, 'w');
			fwrite($handle, $resultat);
			fclose($handle);
			//echo $resultat;
			/*if (!@$docStruct2->load($resultat)){
				return FALSE;
			}*/
			@$docStruct2->load($resultat);    //transformer le string resultat en object comme document_xml pour pouvoir le sauver
			return $resultat;
		}
	}
}
 
 
 
function child_pars($Snoeud, $Enoeud){	// Fonction de parsage d'enfants	// Si elle n'a pas encore ete declaree (c'est la premiere balise), on initialise $accumulation
	global $tree, $Smessage;
 
	if($Snoeud->hasChildNodes() && $Snoeud->nodeName!="DATA" && $Enoeud->hasChildNodes()){
		$Senfants_niv1 = $Snoeud->childNodes; 							// Les enfants du nœud traité		
		$Eenfants_niv1 = $Enoeud->childNodes;
		foreach($Eenfants_niv1 as $Eenfant){
			foreach($Senfants_niv1 as $Senfant){ 							// Pour chaque enfant, on vérifie…
				if($Eenfant->nodeName==$Senfant->getAttribute('SMARTNAME')){ 	//appartient bien 'a docEx
					if(!isset($accumulation)) {$accumulation = '';}
					if($Senfant->hasChildNodes() == true && $Senfant->nodeName!="CODESETS"){ 				// …s'il a lui-même des enfants
						$accumulation .= child_pars($Senfant, $Eenfant); 	
					}
					elseif ($Senfant->nodeName=="SEGMENTREF"){
						$newNode=traitement_segmentref($Senfant, $Eenfant);
						$accumulation .=  child_pars($newNode, $Eenfant);
					}
					elseif ($Senfant->nodeName=="COMPOSITEREF"){
						$newNode=traitement_compositeref($Senfant, $Eenfant);
						$accumulation .= child_pars($newNode, $Eenfant);
					}
					elseif ($Senfant->nodeName=="GROUPREF"){
						$newNode=traitement_groupref($Senfant, $Eenfant);
						$accumulation .= child_pars($newNode, $Eenfant);
					}
 
					else {
						echo " simplePars(accumulation)", $Senfant->nodeName;
						$accumulation .= "[".simple_pars($tree, $Senfant, $Eenfant)."]";
					} 
 
				}
			}
		}
	}
	if(!isset($accumulation)){
		return simple_pars($Snoeud, $Enoeud);
	}
	$tmp=simple_pars($Snoeud, $Enoeud, $accumulation);
	if($tmp==''){
		return $accumulation;
	}
 
 
//	if ($Snoeud==$Smessage) {
	//echo "[", simple_pars($Snoeud, $Enoeud, $accumulation), "]"; 
//	}
	return simple_pars($Snoeud, $Enoeud, $accumulation);  			// accumulation est le resultat du parsage de tous les noeuds: le html se forme
}
 
function traitement_segmentref($Senfant){
	global $tree;
	$TREE=$tree->childNodes;
	foreach ($TREE as $arbreSegments) {
		if ($arbreSegments->nodeName=="SEGMENTS"){
			$newNode=search_id($Senfant->getAttribute('ID'), $arbreSegments); //arbreSegments est bien un noeud
		}
	}
	return $newNode;
}
 
 
function traitement_compositeref($Senfant){
	global $tree;
	$TREE=$tree->childNodes;
	foreach ($TREE as $arbreComposites) {
		if ($arbreComposites->nodeName=="COMPOSITES"){
			$newNode=search_id($Senfant->getAttribute('ID'), $arbreComposites); //arbreSegments est bien un noeud
		}
	}
	return $newNode;
}
 
function traitement_groupref($Senfant){
	global $tree;
	$TREE=$tree->childNodes;
	foreach ($TREE as $arbreGroups) {
		if ($arbreGroups->nodeName=="GROUPS"){
			$newNode=search_id($Senfant->getAttribute('ID'), $arbreGroups); //arbreSegments est bien un noeud
		}
	}
	return $newNode;
}
 
 
function search_id($id, $noeud){ 
	$fils=$noeud->childNodes;
	foreach ($fils as $enfant){
		if ($enfant->getAttribute('ID')==$id){
			return ($enfant);
		}
	}
	return NULL; // au cas ou, si on ne retrouve pas le segment avec le bon id
}
 
 
function traitement_data($Snoeud, $Enoeud){
	if ($Snoeud->hasChildNodes()==true){
		$codesets = $Snoeud->childNodes; 
		foreach ($codesets as $codes){
			if ($codes->nodeName=="CODESETS"){
				$codeS = $codes->childNodes; 
				foreach ($codeS as $codeset){
					if ($codeset->nodeName=="CODESET"){
						if ($codeset->attributes->getNamedItem('TAG')->nodeValue == $Enoeud->nodeValue){
							return $contenu=("<p class='data'>".$Snoeud->attributes->getNamedItem('DESCRIPTION')->nodeValue." : ".$Enoeud->nodeValue." ( ".$codeset->attributes->getNamedItem('DESCRIPTION')->nodeValue.")</p><BR>");
						}
					}
				}
			}
		}
	}
}
 
 
function simple_pars($Snoeud, $Enoeud, $content_to_insert='') {
	$balise_1 = array('SEGMENT' => '<div class="segment"><p class="segment_smartname">"$1"</p><p class="segment_description">"$2" ,"$3" </p>',
						'COMPOSITE' => '<div class="composite"><p class="composite_smartname">"$1"</p><p class="composite_description">"$2", "$3"</p>',
						'GROUP' => '<div class="group"><div class="group_descr"><p class="group_smartname">$1</p><p class="group_description">"$2" , "$3" </p>',
						'DATA' => '<div class="data"><p class="DATA_smartname">$1</p><p class="group_description">"$2" , "$3" </p>',
						'#text' => '');
 
 
	$balise_2 = array('SEGMENT' => '</div><br>',
						'COMPOSITE' => '</div><br>',
						'GROUP' => '</div><br>',
						'#text' => ''); 								// Tableau des balises fermantes
 
	$attributs = array('SEGMENT' => 'DESCRIPTION',
						'GROUP' => 'DESCRIPTION',
						'COMPOSITE' => 'DESCRIPTION'
						); 	
 
 
	if(!empty($content_to_insert)){ 										//On détermine si on veut spécifier du contenu préparsé
		if(!isset($contenu)) $contenu = $content_to_insert; 									// Si c'est le cas, on met la variable de fonction en contenu
	}
 
	elseif(!isset($contenu)){
		$contenu = $Enoeud->nodeValue;
	}
 
	if ($Snoeud->nodeName=="DATA") {
		$intermediaire=$contenu=traitement_data($Snoeud, $Enoeud);
	}
 
	elseif ($Snoeud->nodeName=="SEGMENT" || $Snoeud->nodeName=="COMPOSITE" || $Snoeud->nodeName=="GROUP" ){ 											
		$first_tag = $balise_1[$Snoeud->nodeName];     								// Première balise (ouvrante)
 
		if($Snoeud->hasAttributes()){ // On remplace les attributs (sauf pour les images) // hasAttributes:domNode. hasAttribute:domElement
				if ($Snoeud->hasAttribute('FUNCTION')){
					$FUNCTION = $Snoeud->attributes->getNamedItem('FUNCTION')->nodeValue;// Récupération de la valeur de l'attribut
				}
				elseif($Snoeud->hasAttribute('TYPENAME')){
					$FUNCTION = $Snoeud->attributes->getNamedItem('TYPENAME')->nodeValue; 
				}
				if ($Snoeud->hasAttribute('NAME')){
					$NAME = $Snoeud->attributes->getNamedItem('NAME')->nodeValue; 
				}
				elseif ($Snoeud->hasAttribute('SMARTNAME')){
					$NAME = $Snoeud->attributes->getNamedItem('SMARTNAME')->nodeValue; 
				}
				if ($Snoeud->hasAttribute('MEANING')){
					$MEANING = $Snoeud->attributes->getNamedItem('MEANING')->nodeValue; 
				}
				elseif ($Snoeud->hasAttribute('DESCRIPTION')){
					$MEANING = $Snoeud->attributes->getNamedItem('DESCRIPTION')->nodeValue; 
				}
				if ($NAME){				// On remplace la valeur $NAME par celle de l'attribut 
					$first_tag = str_replace("$1", $NAME, $first_tag); 
				}
				if ($FUNCTION){	
					$first_tag = str_replace("$2", $FUNCTION, $first_tag); 
				}
				$first_tag = str_replace("$3", $MEANING, $first_tag); 
			}
		$intermediaire = $first_tag . $contenu . $balise_2[$Snoeud->nodeName]; 		// On assemble le tout
	}
 
	if(!isset($intermediaire)) $intermediaire ='';
	return $intermediaire; // On renvoie le texte parsé
}
 
 
?>
mais comme vous le voyez dans mon message, j'ai parfois les memes balises. par exemple

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<balise1>   
    <balise3>    
      <balise4>1</balise4>   
      <balise5>SV</balise5>   
    </balise3>   
  </balise1>    
  <balise1>    
    <balise3>    
      <balise4>0</balise4>   
      <balise5>TV</balise5>    
    </balise3>    
  </balise1>
et l'affichage nous donne deux fois la meme balise version avec 'a l'interieur 2 la meme balise idsection...
ce que j'aimerais c'est regrouper ces deux balises et avoir dans on affichage quelque chose du type (tableau)

versionNumber ------- referenceQualifier
1 -------------------- SV
0 -------------------- TV

est ce que cela semble facilement faisable et imbricable dans un code deja gros? je me suis un peu perdue dedans et je ne vois plus vraiment..