[JScript+XML]Como ler conteudo deste nó?

Armadillo

Folding Member
este é o meu XML:

Código:
<produto>
    <id>0</id>
    <descricao>produto 0</descricao>
    <preco>0</preco>
    <custom>1</custom>
    <componente>
        <tipo>t1</tipo>
        <subproduto>sub_p1</subproduto>
    </componente>
    <componente>
        <tipo>t2</tipo>
        <subproduto>sub_p2</subproduto>
    </componente>        
</produto>
Os nós que pretendo ler sao os <componente>

Estou usando a seguinte forma para tentar ler estes nós:
Código:
//...
var x=doc.documentElement;    
//...
for(var i=4;i<x.childNodes.length;i++){//percorrendo apenas a partir do nó=4->componentes
    alert(x.childNodes[0].childNodes[i].childNodes[0].nodeValue);    
    alert(x.childNodes[1].childNodes[i].childNodes[0].nodeValue);    
}
o que me está escapando??

obrigado
cumpz
:msmiley1:
 
agradeço a ajuda, mas ja tenho muito código que nao me apetecia mudar (sao os ...) usando Childnodes. Fica para o proximo script, I won't forget!

E usando os childNodes, aonde está o danoninho que me falta??

obrigado:)
 
eu nao tenho a certeza... ainda ando a arranhar muito nisto...
mas parece me que é necessario 2 instruções for do tipo

for(var i=4;i<x.childNodes.length;i++){//percorre componente
for(var e=0; i<=1;i++){ // percorre os child do node componente
alert(x.childNodes.childNodes[e].nodeValue);
}
}
 
testado
Código:
[SIZE=2][COLOR=#0000ff][COLOR=white]function[/COLOR][/COLOR][/SIZE][SIZE=2][COLOR=white] loadXMLDoc(fname)[/COLOR]
[COLOR=white]{[/COLOR]
[/SIZE][SIZE=2][COLOR=white]var[/COLOR][/SIZE][SIZE=2][COLOR=white] xmlDoc;[/COLOR]
[COLOR=white]xmlDoc=[/COLOR][/SIZE][COLOR=white][SIZE=2]new[/SIZE][SIZE=2] ActiveXObject([/SIZE][SIZE=2]"Microsoft.XMLDOM"[/SIZE][/COLOR][SIZE=2][COLOR=white]);[/COLOR]
[COLOR=white]xmlDoc.async=[/COLOR][/SIZE][SIZE=2][COLOR=white]false[/COLOR][/SIZE][SIZE=2][COLOR=white];[/COLOR]
[COLOR=white]xmlDoc.load(fname);[/COLOR]
[/SIZE][SIZE=2][COLOR=white]return[/COLOR][/SIZE][SIZE=2][COLOR=white](xmlDoc);[/COLOR]
[COLOR=white]}[/COLOR]
[/SIZE] 
 
[SIZE=2][COLOR=white]function[/COLOR][/SIZE][SIZE=2][COLOR=white] run(){[/COLOR][/SIZE]
[SIZE=2][COLOR=white]xml=loadXMLDoc([/COLOR][/SIZE][COLOR=white][SIZE=2]"teste.xml"[/SIZE][SIZE=2]);[/SIZE][/COLOR]
[SIZE=2][COLOR=white]for[/COLOR][/SIZE][SIZE=2][COLOR=white](i=0; i<=1;++i){[/COLOR][/SIZE]
[SIZE=2][COLOR=white]alert(xml.getElementsByTagName([/COLOR][/SIZE][SIZE=2][COLOR=white]'componente'[/COLOR][/SIZE][SIZE=2][COLOR=white])[0].childNodes[i].firstChild.xml)[/COLOR][/SIZE]
[SIZE=2][COLOR=white]} } [/COLOR][/SIZE]
 
Código:
for(var j=0;j<=1;j++){               
   alert(doc.getElementsByTagName('componente')[0].childNodes[j].firstChild.xml)
}
da-me "undefined". but why?
 
Boas, experimenta assim (dentro do teu ciclo):

Código:
alert(x.childNodes[i].childNodes[0].childNodes[0].nodeValue);
alert(x.childNodes[i].childNodes[1].childNodes[0].nodeValue);

Penso que irá funcionar se o que pretendes são os elementos tipo e subproduto de cada elemento componente.
 
Última edição:
nao, assim tb nao dá! :( se for necessario, eu posto aqui a minha funcao.

obrigado
cumpz

edit:
JA está!!

Código:
   alert(x.childNodes[i].childNodes[0].childNodes[0].nodeValue);
   alert(x.childNodes[i].childNodes[1].childNodes[0].nodeValue);
 
Última edição:
Hmm, o que é que aparece na janela do alert com o código que coloquei acima? Testei no tryit editor do w3schools e pareceu-me estar a funcionar correctamente.
 
sim, parece-me ser muito simples! simplesmente nao vou reformular todo o meu script agora que ja está concluido (agora tenho 20 minutos livres :p). Mas nos proximos scripts, é certinho que vou usar o XPath ;)

obrigado a todos
Cumpz
 
Hum.. começo a perceber o teu problema quando dizes que usas N linguagens na mesma aplicação.... agora é JScript?! O que é que vem a seguir? ActionScript? :002:
 
por acaso tambem tenho que trabalhar nisso (actionscript), slack_guy (nao estou a brincar)!! sou carne para canhao!:blubomte:
Dei por mim ontem, numa function jscript a meter sintaxe do php e vb/asp.
Cumulo era agora ter que fazer umas funçoes AJAX com AS e ASP e PHP. Isso é que era!!
 
nao te rias!!:) isto acontece!! poe-te a programar numa semana em jscript, AS, ASP, PHP, perl(esta foi por tua causa;) , ou foi por minha?)VB, VB.net, metes uns CSS e HTML e vez como começas a programar em pelo menos 3 delas no mesmo "naco" de código!

edit:
e depois fazem pedidos destes!! Até ficas a falar aramaico, se for preciso!!
 
Última edição:
Boas.. já vi que já tens isso resolvido. Mas a melhor opção era usares o getElementsbyTag (qq coisa assim).
Xpath é uma chatice para teres uma solução cross-browser.

PS: Cuidado com os whitespaces, Firefox contam como nós, no IE não! ;)
 
Back
Topo