Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS1/AS2
AS1/AS2 Questions relatives à la programmation ActionScript 1 et 2 (Cours AS2)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/07/2007, 21h14   #1
Nouveau Membre du Club
 
Avatar de bractar
 
Inscription : janvier 2004
Messages : 201
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 201
Points : 29
Points : 29
Par défaut [AS2] Profondeur d'un doc XML en actionscript 2

Bonjour,
j'ai besoin de savoir dynamiquement (avec actionscript 2) l'id de l'élément le plus profond de mon arbre XML.
Dans l'exemple ci-dessous, j'aurais comme résultat "level_4". Je pense qu'il faut faire une fonction récursive mais je suis assez nul avec ça. Quelqqu'un pourrait m'aider?
Merci d'avance


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
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
	<item label="Item 1" id="item1">
		<item label="Vestibulum" id="vestibulum">
			<item label="Ipsum" id="ipsum" />
			<item label="Primis" id="primis" />
			<item label="Faucibus" id="faucibus" />
		</item>
		<item label="Luctus" id="luctus">
			<item label="Ultrices" id="ultrices" />
			<item label="Quisque" id="quisque" />
			<item label="Vitae" id="vitae" />
		</item>
	</item>
	<item label="Item 2" id="item2">
		<item label="Level 1" id="level_1">
			<item label="Level 2" id="level_2">
				<item label="Level 3" id="level_3">
					<item label="Level 4" id="level_4" />
				</item>
			</item>
		</item>
	</item>
</root>
__________________
Bractar the French fry eater
http://www.flale.com
bractar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 12h30   #2
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 234
Points : 2 234
Lut,

pas besoin de fct recursive rassure toi ..

au pire des cas une boucle while ça devrait suffire.

Utilise l'element childNodes.length lors de la lecture du fichier.

;)
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 17h26   #3
Nouveau Membre du Club
 
Avatar de bractar
 
Inscription : janvier 2004
Messages : 201
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 201
Points : 29
Points : 29
salut,
comment tu fais?
J'en suis pas si sur pour la récursivité, car je ne peux pas faire un nombre de boucles while ou for définie à l'avance (il peut y avoir 50 niveaux différents...)

firstChild.childNodes.length me retournerait 2 dans ce cas mais il y a quatres niveaux différents pour ce 2nd noeud...
__________________
Bractar the French fry eater
http://www.flale.com
bractar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 18h23   #4
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 234
Points : 2 234
re,

principe de programmation :

la boucle for est utilisée pour un nombre d'iteration connu.

la boucle while par contre peux effectuer un nombre d'iteration variable en fonction du contexte.


mais excuse moi c'est vrai que tu as raison, une fct recursive serai le plus facile à faire.

dans ton cas, il faudrait tester pour chaque noeud .. :
Code :
1
2
3
4
5
6
if( XMLnode.attributes.label != undefined)
{
  nbNode ++;
}else{
  // sortir de la fct rec
}
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 00h28   #5
Nouveau Membre du Club
 
Avatar de bractar
 
Inscription : janvier 2004
Messages : 201
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 201
Points : 29
Points : 29
merci mais t'aurais pas un exemple plus concret? (sans pour autant recréer l'objet xml...)
merci
__________________
Bractar the French fry eater
http://www.flale.com
bractar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2007, 10h24   #6
Rédacteur
 
Avatar de freegreg
 
Inscription : août 2002
Messages : 4 395
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2002
Messages : 4 395
Points : 5 227
Points : 5 227
Salut,

essaie quelque chose comme cela :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getNodeDepth(xn_:XMLNode):Number {
	var nDepth:Number = 0;
	for(var i:Number = 0; i<xn_.childNodes.length; i++) {
		nDepth = Math.max(nDepth, getNodeDepth(xn_.childNodes[i]));
	}
	return nDepth + 1;
}
 
function getXmlDepth(xml_:XML):Number {
	var nDepth:Number = 0;
	for(var i:Number = 0; i<xml_.childNodes.length; i++) {
		nDepth = Math.max(nDepth, getNodeDepth(xml_.childNodes[i]));
	}
	return nDepth;
}
A tester
__________________
Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
Vous voulez partager des ressources concernant les technologies ci-dessus : contactez-moi
freegreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h43.


 
 
 
 
Partenaires

Hébergement Web