Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

21jan/090

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:

  1. Le préfixe du namespace (ici "xlink")
  2. 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

Remplis sous: XML || Taggé comme: , , Laisser un commentaire

Articles similaires

Commentaires (0) Trackbacks (0)

Aucun commentaire pour l'instant


Leave a comment

(required)

Aucun trackbacks pour l'instant