Meus deus do ceu! nÃo consigo ler o xml

1 resposta
Z

Pessoal, é o seguinte! EU to usando o DOM para ler mensagens XML, mas dêm uma olhada num exemplo de estrutura que estou utilizando:


<?xml version=“1.0” encoding=“ISO-8859-1”?>
<PRIMITIVA nome=“MENSAGEM”>

<CLASSE nome=“ENTRADA”>

<CLASSE nome=“AUTENTICACAO”>

&lt;CAMPO nome="USUARIO"&gt;user&lt;/CAMPO&gt;
&lt;CAMPO nome="SENHA"&gt;password&lt;/CAMPO&gt;
&lt;CAMPO nome="ORIGEM"&gt;system&lt;/CAMPO&gt;

</CLASSE>
<CLASSE nome=DADOS>
<pre><code>&lt;CAMPO nome="CLIENTE"&gt;&lt;/CAMPO&gt;
&lt;CAMPO nome="EMPRESA"&gt;&lt;/CAMPO&gt;
&lt;CAMPO nome="ENDERECO"&gt;&lt;/CAMPO&gt;
&lt;CAMPO nome="CIDADE"&gt;&lt;/CAMPO&gt;

&lt;CLASSE nome="Grupo_Telefones"&gt;

  &lt;CLASSE nome="Telefone"&gt;

    &lt;CAMPO nome="Telefone"&gt;&lt;/CAMPO&gt;
    &lt;CAMPO nome="Tipo_Telefone"&gt;&lt;/CAMPO&gt;
    &lt;CAMPO nome="Nome_Contato"&gt;&lt;/CAMPO&gt;

  &lt;/CLASSE&gt;

&lt;/CLASSE&gt;
</CLASSE> </CLASSE> <CLASSE nome=“SAIDA”> <CLASSE nome=“MENSAGEM”>
&lt;CAMPO nome="CODIGO"&gt;&lt;/CAMPO&gt;
&lt;CAMPO nome="DESCRICAO"&gt;&lt;/CAMPO&gt;
</CLASSE> <CLASSE nome=“ATENDENTE”>
&lt;CAMPO nome="NOME"&gt;&lt;/CAMPO&gt;
&lt;CAMPO nome="SETOR"&gt;&lt;/CAMPO&gt;
&lt;CAMPO nome="RAMAL"&gt;&lt;/CAMPO&gt;
</CLASSE> </CLASSE> </PRIMITIVA>
Meu código é mais ou menos assim:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance&#40;&#41;;
DocumentBuilder db = dbf.newDocumentBuilder&#40;&#41;;
Document doc = db.parse&#40;arquivoXML&#41;;
Element elem = doc.getDocumentElement&#40;&#41;;

NodeList nl = elem.getElementsByTagName&#40;"CLASSE"&#41;;

for&#40; int i=0; i &lt; nl.getLength&#40;&#41;; i++ &#41; &#123;

     Element classe = &#40;Element&#41; nl.item&#40; i &#41;;
     String nomeClasse = classe.getAttribute&#40;"nome"&#41;;

     NodeList children = classe.getElementsByTagName&#40;"CAMPO"&#41;;

     for&#40; int j=0; j &lt; children.getLength&#40;&#41;; j++ &#41; &#123;

          Element campo = &#40;Element&#41; children.item&#40;j&#41;;
          String nomeCampo = campo.getAttribute&#40;"nome"&#41;;
     &#125;
&#125;
O que acontece é o seguinte: Quando uso o primeiro comando (getElementsByTagName(“CLASSE”):wink: ele pega todos os nos chamados CLASSE, e eu queria apenas os que estão logo abaixo do nó PRIMITIVA, mas até ai tudo bem. Porém quando uso o segundo comando para pegar os campos (getElementsByTagName(“CAMPO”);), ele também pega todos os nos chamados CAMPO do documento, e não apenas os que estão dentro do elemento que criei com o no CAMPO, conseguiram entender? Então não sei dentro que qual nó CLASSE está o nó CAMPO… Como posso fazer isso? Como vocês costumam tratar arquivos XML? Valeu pessoal!

1 Resposta

B

elem.getElementsByTagName(“CLASSE”);

é provavel que pegue todos mesmo, no formato de array.

Se você tiver como, informe a posição no array.

Outra sugestão é… ao inves de usar <classe name=“Mensagem”>

use:

&lt;mensagem&gt; &lt;codigo&gt;123&lt;/codigo&gt; &lt;/mensagem&gt;

Criado 13 de maio de 2005
Ultima resposta 13 de mai. de 2005
Respostas 1
Participantes 2