Hay otras maneras de hacer esto, como usando ArrayCollation, sólo que quería hacer este post sobre lo fácil que es manejar contenido XML en Actionscript 3 (y el gran contraste en ese aspecto con manejar XML en Actionscript 2).
Para este artículo usaremos Flex Builder 2, disponible para descargar de la web de Adobe.
Bien, en AS3 existen las clases XMLDocument y XMLNode, que permiten trabajar con el XML como en AS2, pero no deberían usarse para nada. En su lugar se usa la clase XML.
Para convertir una cadena, objeto o cualquier otra cosa posible en XML, usamos la función global XML(expresión ).
Aquí viene lo bonito: si tenemos el xml de un rss, por ejemplo, http://www.cristalab.com/rss.php el XML se trabaja automáticamente como un Array de Objets, de tal manera que para referirnos a digamos el primer elemento será simplemente elXML.channel.item[0], sin tener que estar jugando con los condenados firstChild y ChildNodes. Pero lo mejor es que podemos usar un condicional en la propia referencia, y que se seleccionen sólo aquellos elementos para los que el condicional devuelve true. Me explico: Si queremos seleccionar todos los elementos del feed de clab cuyo título empiece por "C" el código sería simplemente:
Código :
elXml.channel.item.(title.substr(0,1)=="C")
También podemos hacer que busque si está una cadena específica, con lo que ya tendríamos creado un filtro:
Código :
elXml.channel.item.(title.substr(0,1)=="C")
Código :
clabRss.channel.item.(title.indexOf(evt.target.text)!=-1)
Dicho esto, les presento este [uu]chapucero, horrible[/uu] inacabado RSSReader en flex:
Código :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" initialize="init();">
<mx:Script>
<![CDATA[
public var clabRss:XML
public function init():void{
var req:URLRequest=new URLRequest("http://www.cristalab.com/rss.php");
var xmlLoader:URLLoader=new URLLoader();
xmlLoader.load(req);
xmlLoader.addEventListener(Event.COMPLETE,onLoadComplete)
}
public function onLoadComplete(event:Event):void{
clabRss=XML(event.target.data);
main.title=clabRss.channel.title
posts.labelField="title";
posts.dataProvider=clabRss.channel.item;
posts.selectedIndex=0;
titleTxt.text=clabRss.channel.item[0].title
description.text=clabRss.channel.item[0].description;
}
public function filter(evt:Event):void{
if(evt.target.text==""){
posts.dataProvider=clabRss.channel.item;
}else{
posts.dataProvider=clabRss.channel.item.(title.indexOf(evt.target.text)!=-1)
}
}
]]>
</mx:Script>
<mx:Panel id="main" width="100%" height="100%" layout="absolute">
<mx:Text y="10" text="Cargando..." fontWeight="bold" fontSize="36" id="titleTxt" height="168" left="10" right="10"/>
<mx:TextArea right="20" left="10" id="description" wordWrap="true" editable="false" bottom="75" top="150"/>
<mx:Button x="10" label="Copy Link" bottom="25" toolTip="{posts.selectedItem.link}" click="{System.setClipboard(posts.selectedItem.link)}"/>
</mx:Panel>
<mx:VBox height="100%">
<mx:Label text="Filtrar:" fontWeight="bold"/>
<mx:TextInput id="searchBox" width="100%" change="filter(event)"/>
<mx:List height="100%" id="posts" width="300" change="{titleTxt.text=posts.selectedItem.title;description.text=posts.selectedItem.description;}"></mx:List>
</mx:VBox>
</mx:Application>A grandes rasgos, lo que hace es cargar el rss de clab mediante un URLRequest y un URLLoader, muestra los títulos en el List y al seleccionarlos allí van cambiando las demás propiedades. Además tiene un botón para copiar la ruta al portapapeles... porque me aburría

por fin un Tip de Flex en Clab
Es un buen tuto para explicar el nuevo objeto XML, pero eso tambien puede hacerse con HTTPService sin tanto código.
De hecho, sin código. Haré un tip de ello.
Por MorphX el 07 de Noviembre de 2006
Arrepentíos pecadores
Buen tip Zah
Por Atse el 07 de Noviembre de 2006
Freddie® :
De hecho, sin código. Haré un tip de ello.
Me parece que voy a meter la pata con lo que voy a decir, corregidme si me equivoco, pero para hacerlo con un HTTPService tienes que programar un backend en php, como hiciste tú en la conferencia, es decir el código que no pones en flash lo pones en un lenguaje de servidor, incluyendo la necesidad de este, además ¿cómo se haría con un rss?
De todas formas, el lector rss no era más que el primer ejemplo práctico que se me ocurrió...
Por jos el 07 de Noviembre de 2006
Código :
<?php function plugClab($consulta){ //Parámetros de la db $db="estudiantes"; $user="root"; $pass=""; $server="localhost"; //Conexion $dbh=mysql_connect($server,$user,$pass) or die ("I cannot open the database because: " . mysql_error()); mysql_select_db($db); $resultado=mysql_query($consulta,$dbh); mysql_close($dbh); return $resultado; } $sql = "SELECT * FROM calificaciones WHERE nombre LIKE '".$_GET["nombre"]."'"; $id=plugClab($sql); $c=0; while($calif[$c]=mysql_fetch_assoc($id)){ $c++; } mysql_free_result($id); header('Content-type: text/xml; charset=utf-8'); ?> <?php echo "<?";?> xml version="1.0" encoding="utf-8" ?> <rsp stat="ok"> <calificaciones total="<?php echo ($c); ?>"> <?php for ($i=0;$i<$c;$i++){ ?> <estudiante id= "<?php echo $calif[$i]["id"]; ?>" nombre="<?php echo $calif[$i]["nombre"]; ?>" email="<?php echo $calif[$i]["email"]; ?>" calificacion="<?php echo $calif[$i]["calificacion"]; ?>" /> <?php } ?> </calificaciones> </rsp>saludos
Maikel :
saludos
Exacto, el código seria algo así:
Código :
Ya después si queremos acceder a los elementos del XML, basta con utilizar la propiedad lastResult. Por ejemplo si queremos el titulo de un feed escribimos:
Código :
donde rss, channel y title son nodos del documento xml cargado.
Por D3N14M el 08 de Noviembre de 2006
Por D3N14M el 08 de Noviembre de 2006
Código :
Alguna idea de que puede ser? Porque me suena al legendario error de los permisos de acceso de Flash, pero no se.
D3N14M_blog :
Por Ruben Rojas el 05 de Diciembre de 2006
'main': identifier and class may not have the same name.
en la línea 32
Por juanan el 19 de Julio de 2007
O eso creo por el momento. Un saludo.
Por Carolina el 09 de Septiembre de 2007
Por Jaime Vera Sobino el 24 de Septiembre de 2008
Alguna idea de que puede ser? Porque me suena al legendario error de los permisos de acceso de Flash, pero no se.Lengua
Por: D3N14M_blog
alguien sabe como arreglar el problema de permisos?, tengo que hacer un trabajo y es el unico inpedimento que tengo para llevarlo a cabo. gracias de antemano.
Por Reiner el 14 de Noviembre de 2008
Tengo el mismo problema.
Encontraron la solución?
reinerra@gmail.com
Por Matias el 28 de Noviembre de 2008
Ese es el problema en ese archivo deberia tener en caso de ser publico el RSS un permiso sin restriccion de dominio. Igualmente si buscan informacion sobre CrossDomain de Flex podran ver muchos casos particulares.
Por asd el 03 de Diciembre de 2008
Por virgilio3865 el 06 de Abril de 2009