Flex ActionScript – Lire des attributs XML ayant un Namespace différent avec e4x
Dans la plupart des cas, e4x facilite grandement la lecture et l'écriture d'un fichier XML en ActionScript. La syntaxe pointée permet de récupérer facilement des éléments tandis que l'opérateur .@ permet de récupérer les attributs des noeuds XML.
Je voulais parser ce XML provenant d'un service WMS (Version réduite):
<Get> <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?"/> </Get>
Pour mon application Flex, il fallait que je récupère la valeur de l'attribut href: http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?. Donc de manière assez habituelle, j'ai essayé:
xml.OnlineResource.@xlink:href
Mais comme le ":" est interprété par le compilateur, je me prend l'erreur de syntaxe:
1084: Erreur de syntaxe : rightparen est attendu devant colon.
Donc j'essaie ensuite avec la notation tableau:
xml.OnlineResource.@["xlink:href"]
Je trace ma valeur, rien ne s'affiche, aucune valeur d'attribut XML n'est donc récupérée. En regardant un peu sur la doc d'XML en ActionScript 3, je me rend compte qu'il faut en fait manipuler ce namespace "xlink".
Ce namespace est défini au début du noeud par:
xmlns:xlink="http://www.w3.org/1999/xlink"
Pour pouvoir lire les attributs XML avec e4x portant ce namespace, il faut créer un objet de type Namespace. Cet objet prend deux paramètres:
- Le préfixe du namespace (ici "xlink")
- L'uri du namespace (ici "http://www.w3.org/1999/xlink")
Une fois ce Namespace crée, on peut accéder aux élément en utilisant la syntaxe "::". Voici un petit exemple de son utilisation:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
<mx:XML id="xml">
<Get>
<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?"/>
</Get>
</mx:XML>
<mx:Script>
<![CDATA[
public function init():void{
var ns:Namespace = new Namespace("xlink", "http://www.w3.org/1999/xlink");
var valAttribute:String = xml.OnlineResource.@ns::href;
trace (valAttribute);
}
]]>
</mx:Script>
</mx:Application>
Pour le cas général (n'importe quel namespace), suivez ce tutorial:
Flex ActionScript – Récupérer des éléments / attributs XML avec e4x avec n'importe quel namespace
Articles similaires
- Flex ActionScript – Récupérer des éléments / attributs XML avec e4x avec n'importe quel namespace
- Flex ActionScript – Lecture de données XML en ActionScript 3
- Flex Tree – Peupler un Tree avec un dataProvider XML et Array (en MXML et ActionScript)
- Flex URLLoader – Envoyer des requêtes et traiter le résultat (exemple)
- Flex ActionScript – Ecriture et édition d'objets XML
Aucun trackbacks pour l'instant





