1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

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

Discussão em 'Web Development' iniciada por Armadillo, 29 de Janeiro de 2008. (Respostas: 19; Visualizações: 942)

  1. Armadillo

    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:
     
  2. pks

    pks Power Member

    utiliza xpath.
    e bastante facil
     
  3. Armadillo

    Armadillo Folding Member

    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:)
     
  4. pks

    pks Power Member

    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);
    }
    }
     
  5. Armadillo

    Armadillo Folding Member

    nop, nao funca.

    mesmo assim, obrigado pela ajuda! ;)
     
  6. pks

    pks Power Member

    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]
    
     
  7. Armadillo

    Armadillo Folding Member

    Código:
    for(var j=0;j<=1;j++){               
       alert(doc.getElementsByTagName('componente')[0].childNodes[j].firstChild.xml)
    }
    
    
    
    da-me "undefined". but why?
     
  8. AliFromCairo

    AliFromCairo Power Member

    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: 29 de Janeiro de 2008
  9. pks

    pks Power Member

    pois... entao nao sei...:confused:
    aqui funcionou
     
  10. Armadillo

    Armadillo Folding Member

    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: 29 de Janeiro de 2008
  11. AliFromCairo

    AliFromCairo Power Member

    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.
     
  12. pks

    pks Power Member

  13. Armadillo

    Armadillo Folding Member

    lolol, os edits fazem disto!!
    hasta la vista xp

    Obrigado pela ajuda
    :wavey:
     
  14. AliFromCairo

    AliFromCairo Power Member

    :P. De qualquer forma, também sou da opinião que deves usar XPath para manipular o documento XML, pois é bastante mais prático.
     
  15. Armadillo

    Armadillo Folding Member

    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
     
  16. slack_guy

    slack_guy Power Member

    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:
     
  17. Armadillo

    Armadillo Folding Member

    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!!
     
  18. slack_guy

    slack_guy Power Member

    Um poliglota, portanto... :-P
     
  19. Armadillo

    Armadillo Folding Member

    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: 29 de Janeiro de 2008
  20. Pikatxu

    Pikatxu Power Member

    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! ;)
     

Partilhar esta Página