olliver 0 Denunciar post Postado Abril 15, 2009 Iae pessoal, boa noite. Preciso de uma ajuda pra identificar um erro numa leitura de xml através de AS2 no flash, já estou tentando isso há um tempo e não consegui ainda. Bom, meu xml tá com essa estrutura: <?xml version="1.0" encoding="utf-8" ?> <photography> <galleries name="1st gallery"> <pic> <image>1b.jpg</image> <title>galeria 1, foto 1</title> <descriptions>Lorem ipsum dolor sit amet</descriptions> <thumbnail>1s.jpg</thumbnail> <link>http://www.1.com</link> </pic> <pic> <image>2b.jpg</image> <title>galeria 1, foto 2</title> <descriptions>consectetuer adipiscing elit</descriptions> <thumbnail>2s.jpg</thumbnail> <link>http://www.2.com</link> </pic> </galleries> <galleries name="2nd gallery"> <pic> <image>3b.jpg</image> <title>galeria 2, foto 3</title> <descriptions>Nunc quis sem nec tellus blandit</descriptions> <thumbnail>3s.jpg</thumbnail> <link>http://www.3.com</link> </pic> <pic> <image>4b.jpg</image> <title>galeria 2, foto 4 - Rússia</title> <descriptions>Duis vitae velit sed dui malesuada</descriptions> <thumbnail>4s.jpg</thumbnail> <link>http://www.4.com</link> </pic> </galleries> </photography> Minha AS no flash: function loadXML(loaded) { if (loaded) { xmlNode = this.firstChild; image = []; dynamic_title = []; dynamic_descriptions = []; thumbnails = []; dynamic_url = []; total = xmlNode.childNodes.length; for (i=0; i<total; i++) { image[i] = xmlNode.firstChild.childNodes[0].childNodes[0].firstChild.nodeValue; title[i] = xmlNode.firstChild.childNodes[0].childNodes[1].firstChild.nodeValue; descriptions[i] = xmlNode.firstChild.childNodes[0].childNodes[2].firstChild.nodeValue; thumbnails[i] = xmlNode.firstChild.childNodes[0].childNodes[3].firstChild.nodeValue; thumbnails_fn(i); url[i] = xmlNode.firstChild.childNodes[0].childNodes[4].firstChild.nodeValue; } firstImage(); } else { content = "Imagem não carregada!"; } } xmlData = new XML(); xmlData.ignoreWhite = true; xmlData.onLoad = loadXML; xmlData.load("gallery.xml"); Ele carrega apenas a primeira imagem de cada galeria, não lista nem o thumbs nem a 2a imagem. Alguém tem uma idéia? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Abril 15, 2009 você esta usando um valor fixo, o zero, teria que usar o "I": image = xmlNode.firstChild.childNodes[0].childNodes[0].firstChild.nodeValue; esta zero em todas, tenta coloca a variável do FOR: image = xmlNode.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue; []´s Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Abril 15, 2009 Bom... O problema basico ai ta na sua chamada de XML mesmo: image[i] = xmlNode.firstChild.childNodes[0].childNodes[0].firstChild.nodeValue; title[i] = xmlNode.firstChild.childNodes[0].childNodes[1].firstChild.nodeValue; descriptions[i] = xmlNode.firstChild.childNodes[0].childNodes[2].firstChild.nodeValue; thumbnails[i] = xmlNode.firstChild.childNodes[0].childNodes[3].firstChild.nodeValue; thumbnails_fn(i); url[i] = xmlNode.firstChild.childNodes[0].childNodes[4].firstChild.nodeValue; Ai ele só vai pegar a primeira galeria... pois você ta dizendo childNodes[0]... e não acrescenta nenhuma variavel ai... logo ele não vai ler a segunda galeria. Tem de criar uma array bi dimensional e teria que fazer um for dentro de um for para poder pegar tudo assim: var image:Array = new Array(); var dynamic_title:Array = new Array(); var dynamic_descriptions:Array = new Array(); var thumbnails:Array = new Array(); var dynamic_url:Array = new Array(); function loadXML(loaded) { if (loaded) { total = xmlData.firstChild.childNodes.length; for (i=0; i<total; i++) { image[i] = new Array(); dynamic_title[i] = new Array(); dynamic_descriptions[i] = new Array(); thumbnails[i] = new Array(); dynamic_url[i] = new Array(); var cn = xmlData.firstChild.childNodes[i].childNodes; for(j=0;j<cn.length; j++){ image[i][j] = cn[j].childNodes[0].firstChild.nodeValue; title[i][j] = cn[j].childNodes[1].firstChild.nodeValue; descriptions[i][j] = cn[j].childNodes[2].firstChild.nodeValue; thumbnails[i][j] = cn[j].childNodes[3].firstChild.nodeValue; url[i][j] = cn[j].childNodes[4].firstChild.nodeValue; } } } else { content = "Imagem não carregada!"; } } xmlData = new XML(); xmlData.ignoreWhite = true; xmlData.onLoad = loadXML; xmlData.load("gallery.xml"); Abraços Compartilhar este post Link para o post Compartilhar em outros sites
olliver 0 Denunciar post Postado Abril 15, 2009 berseck, valeu pela tentativa. Éder, é exatamente isso q tava faltando. tinha colocado o childNodes, mas tava sem o firstChild... hehehe agora funcionou essa parte, porém apareceu outro probleminha: Só é puxada a quantidade de fotos (dentro de uma galeria) de acordo com a quantidade de galerias.... por exemplo, se eu criar 3 galerias, só serão puxadas as 3 primeiras fotos de cada galeria. Pra entenderem melhor, veja que no exemplo abaixo eu tenho 2 galerias (1st e 2nd) e na "1st gallery" eu tenho 3 nós filhos, ou seja, 3 fotografias... Como eu só tenho 2 galerias criadas, o flash só interpreta como se eu tivesse apenas 2 nós filhos na "1st gallery", mesmo que eu tenha 3 ou 1000 nós filhos dentro dela... isso se repete pra todas as outras galerias que eu criar. XML: <photography> <galleries name="1st gallery"> <pic> <image></image> <title></title> <descriptions></descriptions> <thumbnail></thumbnail> <link></link> </pic> <pic> <image></image> <title></title> <descriptions></descriptions> <thumbnail></thumbnail> <link></link> </pic> <pic> <image></image> <title></title> <descriptions></descriptions> <thumbnail></thumbnail> <link></link> </pic> </galleries> <galleries name="2nd gallery"> <pic> <image></image> <title></title> <descriptions></descriptions> <thumbnail></thumbnail> <link></link> </pic> </galleries> </photography> Obrigado pela ajuda de vcs. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Abril 15, 2009 Faça a minha resposta... Que você vai ter os dados que quer. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
olliver 0 Denunciar post Postado Abril 15, 2009 pois é berseck, testando assim ele simplesmente não consegue mostar a galeria... não encontra os dados do xml. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Abril 15, 2009 Bom então vamos lá O código que eu usei: var image:Array = new Array(); var dynamic_title:Array = new Array(); var dynamic_descriptions:Array = new Array(); var thumbnails:Array = new Array(); var dynamic_url:Array = new Array(); function loadXML(loaded) { if (loaded) { total = xmlData.firstChild.childNodes.length; for (i=0; i<total; i++) { image[i] = new Array(); dynamic_title[i] = new Array(); dynamic_descriptions[i] = new Array(); thumbnails[i] = new Array(); dynamic_url[i] = new Array(); var cn = xmlData.firstChild.childNodes[i].childNodes; for(j=0;j<cn.length; j++){ image[i][j] = cn[j].childNodes[0].childNodes; trace(image[i][j]); dynamic_title[i][j] = cn[j].childNodes[1].childNodes; trace(dynamic_title[i][j]); dynamic_descriptions[i][j] = cn[j].childNodes[2].childNodes; trace(dynamic_descriptions[i][j]); thumbnails[i][j] = cn[j].childNodes[3].childNodes; trace(thumbnails[i][j]); dynamic_url[i][j] = cn[j].childNodes[4].childNodes; trace(dynamic_url[i][j]); } } } else { content = "Imagem não carregada!"; } } xmlData = new XML(); xmlData.ignoreWhite = true; xmlData.onLoad = loadXML; xmlData.load("gallery.xml"); Resultado do output: 1b.jpg galeria 1 foto 1 Lorem ipsum dolor sit amet 1s.jpg http://www.1.com 2b.jpg galeria 1 foto 2 consectetuer adipiscing elit 2s.jpg http://www.2.com 3b.jpg galeria 2 foto 3 Nunc quis sem nec tellus blandit 3s.jpg http://www.3.com 4b.jpg galeria 2 foto 4 - Russia Duis vitae velit sed dui malesuada 4s.jpg http://www.4.com Acho que meu caminho tava certo heim ;) Abraços Compartilhar este post Link para o post Compartilhar em outros sites
olliver 0 Denunciar post Postado Abril 15, 2009 Então, ele até tem o output certinho... da mesma forma que você mostrou, mas não exibe informação nenhuma no flash (imagem, titulo, link, descrição), só carrega o layout do stage. Abraço Compartilhar este post Link para o post Compartilhar em outros sites
olliver 0 Denunciar post Postado Abril 16, 2009 resolvi aqui... troquei o total = xmlNode.childNodes.length; por: total = xmlNode.firstChild.childNodes.length; valeu pela atenção e ajuda. abraços Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Abril 16, 2009 Bom no caso ai... Você tem que chamar assim images[0][0] = 1.jpg images[0][1] = 2.jpg images[1][0] = 3.jpg images[1][1] = 4.jpg Ela virou uma array bi dimensional... Assim você pode colocar quantas galerias quiser galeria 1 vai ser o 0 a 2 vai ser o 1... se tiver a terceira vai ser o 2... e assim por diante. Abraços Compartilhar este post Link para o post Compartilhar em outros sites