ENTRADA: XPathAPI en flash.

May 7th, 2006 escrito por goliat flash, xml y flash

Que es XPath?

XPath es una manera simple para buscar en un documento XML.

Te permite trabajar con documentos XML utilizando nombres en lugar la engorrosa sintaxis de firstChild.childNodes...La clase XPathAPI nor permite simplificar las tareas de busqueda en documentos XML desde Flash, basandonos en nombres de nodos y valores de atributos.

Flash soporta solo una parte de las funcionalidades de XPath, pero suficiente como para ahorrarnos tiempo y dolores de cabeza.

Cómo utilizamos XPath?

Con XPath, nos ahorramos el tiempo de tener que descubrir con que nodos tenemos que trabajar para obtener los datos que queremos, pudiendo trabajar con los nodos como trabajaríamos con paths a documentos.

XPath estaba disponible en Mx2004 pero sin documentación. En Flash 8 existe docuementación, pero sin mucho detalle. Hay un link a livedocs con un pdf que tiene una lista de métodos y ejemplos.

 

Como utilizar XPath en flash

Hay dos cosas que tenemos que hacer para poder utilizar la clase XPathAPI.

Primero, importar la clase: import mx.xpath.XPathAPI;

Y lo siguiente, tener una instancia de la clase DataBinding (Ventana>Bibliotecas Comunes > Clases) en nuestro documento. Con arrastrar una instancia de la clase al escenario, y luego borrarla es suficiente.

Ya estamos listos para empezar a utilizar la clase.

Métodos de clase

La clase contiene los siguientes métodos:

  • XPathAPI.getEvalString()
  • XPathAPI.selectNodeList()
  • XPathAPI.selectSingleNode()
  • XPathAPI.setNodeValue()

 

Veremos unos ejemplos de selectNodeList() y selectSingleNode().

XPathAPI.selectNodeList()

Este método devuelve los nodos de un nodo especifico.

Sintaxis:

XPathAPI.selectNodeList(node, path)

Veamos un ejemplo de docuemtnso XML:

XML:
  1. <!--l version="1.0" encoding="utf-8" standalone="yes-->
  2.  
  3. imagen1
  4. descripcion1
  5.  
  6. imagen2
  7. descripcion2
  8.  
  9. imagen3
  10. descripcion3
  11.  
  12. imagen4
  13. descripcion4
  14.  
  15. imagen5
  16. descripcion5

 

Si queremos conocer el valor de todos los nombres de producto, el path seria

/contenido/datos/nombreProducto y el nodo seria this.firstChild.

En este caso, utilizaríamos selectNodeList así:

XPathAPI.selectNodeList(this.firstChild, "/contenido/datos/nombreProducto");

Esto de devolvería un array con todos los títulos.

Ejemplo:

Actionscript:
  1. import mx.xpath.XPathAPI;
  2.  
  3. var productos_xml:XML = new XML();
  4. productos_xml.ignoreWhite = true;
  5.  
  6. productos_xml.onLoad = function(cargado:Boolean){
  7. if (cargado){
  8. // Pedir el nombre de producto del siguietne path /contenido/datos/nombreProducto
  9. var Productos_str:String = XPathAPI.selectSingleNode(this.childNodes[0], "/contenido/datos/nombreProducto");
  10. var Descripcion_str:String = XPathAPI.selectSingleNode(this.childNodes[0], "/contenido/datos/descripcionProducto");
  11. trace("Nombre: "+Productos_str);
  12. trace("Descripcion: "+Descripcion_str);
  13. }else{
  14. trace("error al cargar el documento XML");
  15. }
  16. };

Este código nos mostraría lo siguiente en la ventana de depuración:

Cargada la imagen1
Cargada la imagen2
Cargada la imagen3
Cargada la imagen4
Cargada la imagen5

 

XPathAPI.selectSingleNode()

Este método se diferencia del anterior en que solo nos devuelve el valor de un solo nodo, en lugar de un array de nodos como con XPathAPI.selectNodeList.

Sintaxis:

XPathAPI.selectSingleNode(node, path)

Siguiendo el ejemplo anterior, si queremos conseguir el valor del primer node de titulo, el código seria:

Actionscript:
  1. import mx.xpath.XPathAPI;
  2.  
  3. var productos_xml:XML = new XML();
  4. productos_xml.ignoreWhite = true;
  5.  
  6. productos_xml.onLoad = function(cargado:Boolean){
  7. if (cargado){
  8. // Pedir el nombre de producto del siguietne path /contenido/datos/nombreProducto
  9. var Productos_str:String = XPathAPI.selectSingleNode(this.childNodes[0], "/contenido/datos/nombreProducto");
  10. var Descripcion_str:String = XPathAPI.selectSingleNode(this.childNodes[0], "/contenido/datos/descripcionProducto");
  11. trace("Nombre: "+Productos_str);
  12. trace("Descripcion: "+Descripcion_str);
  13. }else{
  14. trace("error al cargar el documento XML");
  15. }
  16. };

El código generaría lo siguiente en la ventana de depuración:

Nombre: imagen1
Descripcion: descripcion1

Podemos utilizar las siguientes expresiones u operadores:

Path absoluto: /contenido/datos/nombreProducto

Ejemplo: var nodoNombre:String = XPathAPI.selectSingleNode(this.firstChild, "/contenido/datos/nombreProducto");

Path relativo : nombreProducto

Ejemplo: var nodoNombre:String = XPathAPI.selectSingleNode(this.firstChild, "nombreProducto");

Asterisco (*) :

"/contenido/*/nombreProducto – nos permite no conocer el nombre de un nodo

Ejemplo: var nodoNombre:String = XPathAPI.selectSingleNode(this.firstChild, "/*/*/nombreProducto");

Predicate expressions using =, AND, or OR :

/contenido/datos/nombreProducto[@fecha]='2006']

o:

/contenido/datos/nombreProducto[@fecha='2004' and @disponible='no']

Ejemplo:

var Productos_ar:Array= XpathAPI.selectNodeList(this.firstChild,"/contenido/datos/nombreProducto[@fecha]='2006']" );

 

Hola: del.icio.us:XPathAPI en flash. digg:XPathAPI en flash. spurl:XPathAPI en flash. furl:XPathAPI en flash. meneame:XPathAPI en flash. stumble:XPathAPI en flash.

3 comentarios a “XPathAPI en flash.”

  1. Gravatar Icon DISEÑO WEB FLASH » Blog Archive » XLEFF: Motor XML de Composiciones Flash Says:

    […] Teniendo en cuenta algunos factores( AS3, Flash 9 y FLEX) condicionan un poco el uso futuro que se le pueda dar a XLEFF.   Aun así, es una idea interesante y además nos introduce la clase XModel. Esta clase similar a Xpath, ambas mejoran las funcionalidades  de la clase XML de flash (menos código y más fácil de leer). […]

  2. Gravatar Icon Tony Lin Says:

    Predicate expressions using “AND” or “OR” MUST be lowercase (and, or)

  3. Gravatar Icon dereck Says:

    you cannot extract node value by using selectSingleNode, just like that… you have to use selectSingleNode then with the returned node use firstChild.nodeValue

Leave a Reply

    Info: Paginas Web Flash

    En este blog hablare un poco de las cosas que profesionalmente, mas me interesan: Flash, ActionScript, Diseño y SEO.

    Con el tiempo espero reunir y realizar un numero de tutoriales sobre Flash y ActionScript. Sobre Diseño y SEO comentare un poco sobre las ultimas noticias que circulan por la red.

    Tambien lo utilizare para realizar un seguimiento de mi propio trabajo, el ritmo de produccion e intentar todas las cosas que aprenda sobre la marcha.

Buscador

Sindicacion

Informacion de Contacto

GoliatStudio: Barcelona-Ibiza.
-c/Pere Serafi, 7. 08012. Bcn
-info[@]paginaswebflash.com
-Tel: (+34) 933 686 794.