J'ai besoin de comprendre les tableaux et les données XML, mais j'ai de la difficulté à comprendre comment transformer les données xml en données utiles. J'espérais que ces forums pourraient fournir un aperçu.FLEX: XML vers le tableau de données?
Je charge mon XML avec ce code:
//set values for XML data file
private var XML_URL:String = "http://www.mysite.com/media/locXML.xml";
private var locXML:XML = new XML();
private function getXMLdata():void
{
var locXMLURL:URLRequest = new URLRequest(XML_URL);
var locXMLLoader:URLLoader = new URLLoader(locXMLURL);
locXMLLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(event:Event):void
{
locXML = XML(locXMLLoader.data);
trace("Data loaded. " + locXML);
}
}
Je suis en train de faire le code suivant dans un tableau contenant la que les données XML. Partout où vous voyez un « [] » J'ai besoin du numéro pour correspondre au record du nombre du fichier locXML ...
for each (var point[]:XML in locXML.location)
{
pointMarker] = new PointMarker();
pointMarker[].buttonMode = pointMarker[].useHandCursor = true;
var image[]:Loader = new Loader();
image[].load(image[]Req, context);
image[].x = -iconHeight/2;
image[].y = -iconWidth/2;
if (pointMarker[]_motion == true)
{
var iconShimmer[]:MovieClip = new IconShimmer() as MovieClip;
iconShimmer[].x = image[].x;
iconShimmer[].y = image[].y;
pointMarker[].addChild(image[]);
pointMarker[].addChild(iconShimmer[]);
pointMarker[].pointName[] = point[].name;
pointMarker[].name = imageBubbleFile[];
}else{
pointMarker[].addChild(image[]);
pointMarker[].pointName[] = point[].name;
pointMarker[].name = imageBubbleFile[];
}
pointMarker[].pointDesc[] = point[].description;
_map.putMarker(new Location(point[].lat, point[].long), pointMarker[]);
pointMarker[].addEventListener(MouseEvent.CLICK, pointMarker[]_Click);
pointMarker[].addEventListener(MouseEvent.ROLL_OVER, pointMarker[]_RO);
pointMarker[].mouseChildren=false;
}
}
}
est ici un petit extrait du fichier XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<location ID="maplogo">
<name>mapLogo</name>
<lat>31.3731712263342</lat>
<long>-94.08871702323849</long>
<iconFile>town.jpg</iconFile>
<imageFile>type1.swf</imageFile>
<motion>false</motion>
</location>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<location ID="bigstarsupermarket">
<name>Big Star Supermarket</name>
<lat>31.5664202</lat>
<long>-93.4904959</long>
<iconFile>bigStar.jpg</iconFile>
<imageFile>type1.swf</imageFile>
<motion>false</motion>
</location>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
</root>
comment peut Je fais cela sans prendre jusqu'à 2000 lignes de code? J'ai codé un chiffre dans chacune de ces parenthèses [], mais cela devient très laborieux ...?
EDIT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EDIT je l'ai changé à l'endroit où il bouclera pendant l'analyse du xml. mais une erreur est générée pour chacun de ce type [ "formating icône" + XMLpCounter]
public function parseLocXML(nodeName:String, lat:Number,
long:Number, iconFile:String,
imageFile:String, motion:String):void
{
if (XMLpCounter==0)
{
//addMarkers();
//trace(arguments);
//trace("--- drawMap ---");
//trace(arguments.join("\r"));
XMLpCounter++;
} else {
XMLpCounter++;
//----------------------------------------------------------------------------------------
var this.["icon"+XMLpCounter]:Loader = new Loader();
var this.["iconFileLink"+XMLpCounter]:String = mediaLoc + locXML.location.iconFile[XMLpCounter];
var this.["iconFile"+XMLpCounter+"Req"]:URLRequest = new URLRequest(iconFileLink[XMLpCounter]);
["imageFileLink"+XMLpCounter] = mediaLoc + locXML.location.imageFile[XMLpCounter];
["imageFile"+XMLpCounter+"Req"] = new URLRequest(imageFileLink[XMLpCounter]);
["locPointMarker"+XMLpCounter] = new PointMarker();
["locPointMarker"+XMLpCounter].buttonMode = ["locPointMarker"+XMLpCounter].useHandCursor = true;
["icon"+XMLpCounter].load(["iconFile"+XMLpCounter+"Req"], context);
["icon"+XMLpCounter].x = -iconHeight/2;
["icon"+XMLpCounter].y = -iconWidth/2;
and so on
}
ERREURS ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ERREURS
var ["icon" + XMLpCounter]:Loader = new Loader();//1084: Syntax error: expecting identifier before left bracket. & 1084: Syntax error: expecting identifier before right bracket.
//var iconFileLink1:String;
//var iconFile1Req:URLRequest;
//var imageFileLink1:String;
//var imageFile1Req:URLRequest;
//obtain from XML the icon for map
var ["iconFileLink"+XMLpCounter]:String = mediaLoc + locXML.location.iconFile[XMLpCounter];//1084: Syntax error: expecting identifier before left bracket. & 1084: Syntax error: expecting identifier before right bracket.
var ["iconFile"+XMLpCounter+"Req"]:URLRequest = new URLRequest(iconFileLink[XMLpCounter]);//1084: Syntax error: expecting identifier before plus. & 1084: Syntax error: expecting identifier before left bracket.
//obtain from XML the ad for bubble
["imageFileLink"+XMLpCounter] = mediaLoc + locXML.location.imageFile[XMLpCounter]; //1084: Syntax error: expecting identifier before assign.
["imageFile"+XMLpCounter+"Req"] = new URLRequest(imageFileLink[XMLpCounter]);//1084: Syntax error: expecting identifier before assign.
["locPointMarker"+XMLpCounter] = new PointMarker();//1084: Syntax error: expecting identifier before assign.
["locPointMarker"+XMLpCounter].buttonMode = ["locPointMarker"+XMLpCounter].useHandCursor = true;//1084: Syntax error: expecting identifier before dot.
["icon"+XMLpCounter].load(["iconFile"+XMLpCounter+"Req"], context);//1084: Syntax error: expecting identifier before dot.
["icon"+XMLpCounter].x = -iconHeight/2;//1084: Syntax error: expecting identifier before dot.
["icon"+XMLpCounter].y = -iconWidth/2;//1084: Syntax error: expecting identifier before dot.
EDIT ~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EDIT Tout semble travailler maintenant, sauf pour deux problèmes. Au dernier bit du code, il ajoute des écouteurs d'événement à chaque marqueur; lorsque la boucle obtient les lignes de code ci-dessous, il renvoie une erreur (ci-dessous le code):
dict["locPointMarker"+i.toString()].addEventListener(MouseEvent.CLICK, ["locPointMarker"+ i.toString()+"_Click"]);
dict["locPointMarker"+i.toString()].addEventListener(MouseEvent.ROLL_OVER, ["locPointMarker"+i.toString()+"_RO"]);
J'ai aussi essayé ce code comme suit:
dict["locPointMarker"+i.toString()].addEventListener(MouseEvent.CLICK, ["locPointMarker_Click"+ i.toString()]);
dict["locPointMarker"+i.toString()].addEventListener(MouseEvent.ROLL_OVER, ["locPointMarker_RO"+i.toString()]);
Erreur # 1034: Type Coercion Échec: impossible de convertir [] @ 1488bac1 en fonction.
Ce que je voudrais faire est de ces deux dernières omettent des lignes, puis ajoutez les écouteurs d'événement dans une boucle à la fin. peut-être en leur envoyant des arguments ou quelque chose ... Est-ce possible?
Pouvez-vous poster les détails de l'erreur? – invertedSpear
J'ai édité le message ci-dessus pour indiquer les erreurs – Phil
Vérifiez ma dernière réponse éditée – invertedSpear