Pues les comento, estoy realizando una aplicación que necesita leer
un xml como primera medida para 'alimentar' toda la aplicación (menús, submenús, etc)
El xml es el siguiente
Código xml:
Ver original
<?xml version="1.0" encoding="UTF-8"?> <cats> <cat id ="1" name="Tarjetas personales"> <subcat id ="1" name = "Tarjeta Regalo"> <sub_subcat id ="1" name = "None"> <frame id = "1" thumbnail = "thumbs/frames/1.png" image = "imgs/frames/1.png" /> <frame id = "2" thumbnail = "thumbs/frames/2.png" image = "imgs/frames/2.png" /> <background id = "1" thumbnail = "thumbs/background/red.png" image = "imgs/background/red.png" /> <background id = "2" thumbnail = "thumbs/background/blue.png" image = "imgs/background/blue.png" /> <image id = "1" thumbnail = "thumbs/images/red.png" image = "imgs/images/red.png" /> <image id = "2" thumbnail = "thumbs/images/blue.png" image = "imgs/images/blue.png" /> </sub_subcat> </subcat> </cat> <cat id ="2" name = "Tarjetas y Sobre Lord"> <subcat id ="1" name = "Invitaciones"> <sub_subcat id ="1" name = "Matrimonio"> <frame id = "1" thumbnail = "thumbs/frames/top.png" image = "imgs/frames/top.png" /> <background id = "1" thumbnail = "thumbs/background/red.png" image = "imgs/background/red.png" /> <image id = "1" thumbnail = "thumbs/images/red.png" image = "imgs/images/red.png" /> </sub_subcat> <sub_subcat id ="2" name = "Grados"> <frame id = "1" thumbnail = "thumbs/frames/top.png" image = "imgs/frames/top.png" /> <background id = "1" thumbnail = "thumbs/background/red.png" image = "imgs/background/red.png" /> <image id = "1" thumbnail = "thumbs/images/red.png" image = "imgs/images/red.png" /> </sub_subcat> </subcat> <subcat id ="2" name = "Mensajes"> <sub_subcat id ="1" name = "Agradecimiento"> <frame id = "1" thumbnail = "thumbs/frames/top.png" image = "imgs/frames/top.png" /> <background id = "1" thumbnail = "thumbs/background/red.png" image = "imgs/background/red.png" /> <image id = "1" thumbnail = "thumbs/images/red.png" image = "imgs/images/red.png" /> </sub_subcat> </subcat> </cat> </cats>
Como podrán ver, tiene el nodo principal cats, dentro tiene cat (categorias) que son los menús principales
Luego, cada cat puede tener varias subcat (subcategorias)
A su vez, las subcat pueden tener varias sub_subcat (sub_subcategorias)
Y finalmente, estas sub_subcat tienen varios frame, background e image
Para leer este xml hago lo siguiente
Código as:
Ver original
function onXmlInfoComplete(event:Event) { //aSubCategory, aChildSubCategory,aFrames,aBackgrounds son arrays var oSettingsXml = XML(event.target.data); i = 0; j = 0; k = 0; for each(oInfo in oSettingsXml.cat) { //Obtain the subcategories for each(oInfo2 in oInfo.subcat) { aSubCategory[i] = { idcat: oInfo.attribute('id'), id: oInfo2.attribute('id'), name: oInfo2.attribute('name') }; //Obtain the subsubcategories for each(oInfo3 in oInfo2.sub_subcat) { //aChildSubCategory[oInfo2.attribute('id')] = { idsubcat: oInfo2.attribute('id') , id: oInfo3.attribute('id'), name: oInfo3.attribute('name') }; aChildSubCategory[j] = { idcat: oInfo.attribute('id'), idsubcat: aSubCategory[i]['id'] , id: oInfo3.attribute('id'), name: oInfo3.attribute('name') }; //Obtain frames for each(oInfo4 in oInfo3.frame) { //aFrames[oInfo3.attribute('id')] = { idsubsubcat: oInfo3.attribute('id') , thumbnail: oInfo4.attribute('thumbnail') }; aFrames[k] = { idcat: oInfo.attribute('id'), idsubcat: aChildSubCategory[j]['idsubcat'] , idsubsubcat: oInfo3.attribute('id') , thumbnail: oInfo4.attribute('thumbnail'), image: oInfo4.attribute('image') }; k++; } k = 0; for each(oInfo4 in oInfo3.background) { //aFrames[oInfo3.attribute('id')] = { idsubsubcat: oInfo3.attribute('id') , thumbnail: oInfo4.attribute('thumbnail') }; aBackgrounds[k] = { idcat: aFrames[k]['idcat'], idsubcat: aFrames[k]['idsubcat'] , idsubsubcat: aFrames[k]['idsubsubcat'] , thumbnail: oInfo4.attribute('thumbnail'), image: oInfo4.attribute('image') }; k++; } j++; } //aChildSubCategory[oInfo2.attribute('id')] = { id: oInfo2.sub_subcat.attribute('id'), name: oInfo2.sub_subcat.attribute('name') }; i++; } } }
o lo siguiente
Código as:
Ver original
function onXmlInfoComplete(event:Event) { var oInicial:XMLList; trace("En Xml complete"); oSettingsXml = XML(event.target.data); //trace(oSettingsXml); //oInicial = oSettingsXml.cats; i = 0; j = 0; k = 0; //aCat, aSubCat y aSubSubCat son arrays //Categories for(i = 0; i < oSettingsXml.cat.length(); i ++ ) { aCat[i] = { id:oSettingsXml.cat[i].attribute('id'), name:oSettingsXml.cat[i].attribute('name') }; } //Subcategories for (i = 0; i < oSettingsXml.cat.subcat.length(); i ++ ) { //Increment j to assign the correct aCat if ( i > 0 && oSettingsXml.cat.subcat[i].attribute('id') == 1 ) { j = j + 1; } aSubCat[i] = { idcat: aCat[j]['id'], id:oSettingsXml.cat.subcat[i].attribute('id'), name:oSettingsXml.cat.subcat[i].attribute('name') }; //trace("aSubcat" + aSubCat[i]['idcat']); //trace("aSubcat" + aSubCat[i]['id']); //trace("aSubcat" + aSubCat[i]['name']); //trace("PROBANDOOOOO " + oSettingsXml.cat.subcat.sub_subcat); } j = 0; for (i = 0; i < oSettingsXml.cat.subcat.sub_subcat.length(); i ++ ) { //Increment j to assign the correct aCat if ( i > 0 && oSettingsXml.cat.subcat.sub_subcat[i].attribute('id') == 1 ) { j = j + 1; } aSubSubCat[i] = { idcat: 0, idsubcat: aSubCat[j]['id'], id: oSettingsXml.cat.subcat.sub_subcat[i].attribute('id'), name: oSettingsXml.cat.subcat.sub_subcat[i].attribute('name') }; trace("aSubcat IDCAT " + aSubSubCat[i]['idcat']); trace("aSubcat IDSUBCAT " + aSubSubCat[i]['idsubcat']); trace("aSubcat" + aSubSubCat[i]['id']); trace("aSubcat" + aSubSubCat[i]['name']); }
En ambos casos, lo que hago es recorrer el xml por cada uno de sus ramas y crear arrays para cada sección (categorias, subcategorias, subsubcategorias) y pues en primera medida me parece que no es optimo pues como podran ver estoy repitiendo en todos los arrays los id de la categoria y subcategoria pues para luego poder filtrar cuando use los arrays en otras partes de la aplicación, pero no he podido encontrar el modo de hacer el array final (el que contiene los frames , backgrounds e images de cada subsubcategoria)
Entonces tengo varias preguntas
1. Hay un modo de hacer el filtro que estoy haciendo de una mejor manera?
2. Es mejor cambiar la estructura del xml? y de ser así, cual sería una mejor estructura que me traiga los mismos datos?
Agradezco sus sugerencias
Saludos