2010-07-20 5 views
0

Je tente actuellement de communiquer avec une API en utilisant Flex comme client. J'utilise Flash Builders HTTPServices pour le faire, un peu un noob à tout cela. Tout fonctionne correctement si les éléments de fichiers XML accédés sont formatés correctement mais si j'ajoute un trait d'union au nom de l'élément, je reçois flex m'avertissant du fait c'est à dire. L'objet renvoyé contient un nom non valide « créé sur » qui ne sont pas conformes aux lignes directrices de nommage identifiant ActionscriptFlex HTTPServices et xml valide

Cela fonctionne:

<?xml version="1.0" encoding="UTF-8"?> 
<projects type="array"> 
    <project> 
    <createdon>2010-07-10</createdon> 
    <name>Project 1</name> 
    </project> 
</projects> 

Cela ne veut pas:

<?xml version="1.0" encoding="UTF-8"?> 
<projects type="array"> 
    <project> 
    <created-on>2010-07-10</created-on> 
    <name>Project 1</name> 
    </project> 
</projects> 

ma question est ce que je peux faire pour rendre le scriptcript xml renvoyé amical. Existe-t-il une norme ou une meilleure pratique pour cela? Je n'ai évidemment aucun contrôle sur le xml étant passé.

Vive

Répondre

-1

Réglez le resultFormat de HTTPService-e4x ou xml. La valeur par défaut est object et Flex tente donc de créer un objet ActionScript pour chaque élément de l'arborescence xml.

<mx:HTTPService resultFormat="xml" other="attributes go here"/> 
+0

Cela ne permet pas – Pakman

+0

@Pakman Je n'ai pas de constructeur Flex pour l'essayer, alors j'espère que vous avez vérifié avant de voter. – Amarghosh

+0

L'auteur a demandé comment gérer les nœuds XML avec des traits d'union. Même si vous changez le 'resultFormat' à' e4x', vous devez toujours utiliser des parenthèses pour référencer le nœud. Mais, je suis nouveau à Flex, donc je peux me tromper. – Pakman

0

Pour référence future, utilisez des crochets. Par exemple:

private var createdOn:String; 

protected function myService_requestHandler(event:ResultHandler):void 
{ 
    createdOn = event.result.projects.project["created-on"]; 
} 
0

Si vous voulez vraiment accéder au contenu sans « - » définir le resultFormat à « texte » et faire quelque chose comme:

onLoad(event:ResultEvent):void 
{ 
    var result:String = event.result; 
    result = result.replace(/created-on/g, 'createdOn'); 
    var xml:XML = new XML(result); 
    // do your processing now... 
}