Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jair Humberto

erro incompreensível ao carregar xml

Recommended Posts

Olá pessoal,

 

Eu estou criando um sistema q vai carregar dados de um xml em javascript puxando através de ajax.

o xml veio bonitinho, inclusive posso visualizar todos os dados atraves de alert().

 

mas na hora de colocar na tabela não aparece.

 

veja parte do código:

 

CODE
conestxmlgridingdata("gridElement", 0, ajax.responseXML);

function conestxmlgridingdata(grd, molde, xmlobj){

var cexmlgrid = document.getElementById(grd);

cexmlgrid.setAttribute("style","overflow:scroll");

switch(molde){

case 0:

var tabela = document.createElement("table");

tabela.border="0";

tabela.setAttribute("cellpadding",0);

tabela.setAttribute("cellspacing",1);

tabela.width="4600";

var titleLinha = document.createElement("tr");

titleLinha.className="psconestDefaultTableTitles";

var titleArray = new Array("Grupo", "Id", "Codigo", "Descricao", "Preco", "Ultima compra", "Ultima venda", "Quantidade", "Fornecedor", "Valor compra", "Icms de entrada", "Icms de saida", "Custo operacional", "Outros impostos", "Comissao", "Lucro", "Desconto", "Medida", "Moeda", "Alertar", "Atualizado em", "R. grupo", "R. Id", "Registrador", "Observacoes");

for(var ind = 0 ; ind < titleArray.length ; ind++){

titleCel = document.createElement("th");

titleCel.appendChild(document.createTextNode(titleArray[ind]));

titleLinha.appendChild(titleCel);

}

tabela.appendChild(titleLinha);

xmlobjshort = xmlobj.firstChild;

for(j = 0 ; j < xmlobj.firstChild.childNodes.length; j++){

outrasLinhas = document.createElement("tr");

for(var i = 0 ; i < titleArray.length ; i++){

outrasCel = document.createElement("td");

//até aqui vai bem. mas quando se trata de colocar o xml aí pronto desanda

outrasCel.appendChild(document.createTextNode(xmlobjshort.childNodes[j].childNod

es[ind] .firstChild.nodeValue));

outrasLinhas.appendChild(outrasCel);

}

tabela.appendChild(outrasLinhas);

}

 

while(cexmlgrid.firstChild){

cexmlgrid.removeChild(cexmlgrid.firstChild);

}

cexmlgrid.appendChild(tabela);

break;

}

}

na minha opinião a parte que interessa é aqui:

 

CODE
for(j = 0 ; j < xmlobj.firstChild.childNodes.length; j++){

outrasLinhas = document.createElement("tr");

for(var ind = 0 ; ind < titleArray.length ; ind++){

outrasCel = document.createElement("td");

outrasCel.appendChild(document.createTextNode(xmlobjshort.childNodes[j].childNod

es[ind] .firstChild.nodeValue));

outrasLinhas.appendChild(outrasCel);

}

tabela.appendChild(outrasLinhas);

}

essa parte do código: outrasCel.appendChild(document.createTextNode(xmlobjshort.childNodes[j].childNod

es[ind].firstChild.nodeValue));

 

se eu puser assim:

outrasCel.appendChild(document.createTextNode("teste"));

 

funciona perfeitamente,

 

se eu puser assim:

outrasCel.appendChild(document.createTextNode(xmlobjshort));

 

funciona perfeitamente, só que imprime só "XML element" na tabela.

 

e inclusive se eu puser,

outrasCel.appendChild(document.createTextNode(xmlobjshort.childNodes[j].childNod

es[ind]));

 

funciona perfeitamente até aqui. só que como eu disse aparece só "XML element".

 

mas se eu experimentar colocar xmlobjshort.childNodes[j].childNodes[ind].firstChild, já não funciona mais,

no entanto...

 

se eu colocar o código abaixo na função..

alert(xmlobjshort.childNodes[j].childNodes[ind].firstChild.nodeValue)

 

ele mostra o valor corretamente. estranho isso não é?

 

o mais estranho é que se eu colocar um alert desses antes do código:

outrasCel.appendChild(document.createTextNode("teste"));

 

aí nem esse funciona mais. Eu já tentei até apenas definir uma variavel simples contendo o conteudo do xml:

var xmlvalor = xmlobjshort.childNodes[j].childNodes[ind].firstChild.nodeValue;

 

mas a partir da variavel, o código não funciona mais.

ele aparentemente para bem nesse ponto, mas o xml está perfeito, inclusive o firefox mostra o xml corretinho.

e não só o firefox, mas se atraves do javascript percebemos que os dados estão corretos,

 

não entendo isso..

 

o que fazer?

alguém já passou por isso e pode me orientar?

 

 

Obrigado desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá galera,

 

descobri o erro.

 

eu estava colocando 25 elementos no titleArray enquanto os nodes do xml eram apenas 24. Isso causou o erro.

Eu realmente queria criar o 25o. Então, fiz a seguinte alteração para dar certo:

 

CODE

xmlobjshort = xmlobj.firstChild;

for(j = 0 ; j < xmlobj.firstChild.childNodes.length; j++){

outrasLinhas = document.createElement("tr");

for(var i = 0 ; i < titleArray.length-1 ; i++){

if(i==4){

outrasCel = document.createElement("td");

outrasCel.appendChild(document.createTextNode("preco"));

outrasLinhas.appendChild(outrasCel);

}

outrasCel = document.createElement("td");

//xmlobjshort.childNodes[j].childNodes.firstChild.nodeValue

outrasCel.appendChild(document.createTextNode(xmlobjshort.childNodes[j].childNod

es.firstChild.nodeValue));

outrasLinhas.appendChild(outrasCel);

}

tabela.appendChild(outrasLinhas);

}

vlw galera, fica aí a dica para quem cometer o mesmo erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.