Ler Atributos Netos com em XML

4 respostas
saulo.costa

Pessoal Salve…Salve.

Estou pela primeira vez postando algo neste OTIMO FORUM e queria contar com a colaboraçãod e vc´s em algumas duvidas, são elas:

  • Queria saber como faço para ler atributos com nomes iguais tipo:

EX: Eu tenho <id> filho de <Tarefa> e mais embaixo tenho <id> filho de <tempoPreparacao> que é filho de <TempoDePreparacao>

  • Ler um XML simples onde não há somente filhos é tranquilo, agora queria me informar se possivel de como faço para ler os filhos dos filhos destes atributos, abaixo segue o codigo que implementei e o XML que estou tendo q fazer leitura.

-------------------Partes do código
Vector dadosXML = new Vector();

try {
        File xmlfile             = new File(xmlPathname);
        DocumentBuilder builder  = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc             = builder.parse(xmlfile);
        NodeList nodes           = doc.getElementsByTagName("Tarefa");
        
        for (int i = 0; i &lt; nodes.getLength(); i++) {
            Vector dadosRegistro          = new Vector();
            Element elemento = (Element) nodes.item(i);

            NodeList idTarefa = elemento.getElementsByTagName("id");
            Element linha     = (Element) idTarefa.item(0);
            int idTaf = Integer.parseInt(linha.getTextContent());

            NodeList tempoProcessamento = elemento.getElementsByTagName("tempoProcessamento");
            linha                       = (Element) tempoProcessamento.item(0);
            int tempoProc = Integer.parseInt(linha.getTextContent());
          .
          .
          .
        }

---------------------------------XML

<Tarefa>
<id>5</id>
<tempoProcessamento>13</tempoProcessamento>
<dataInicial>268</dataInicial>
<dataFinal>280</dataFinal>
<custoAntecipacao>24</custoAntecipacao>
<custoAtraso>76</custoAtraso>
<tmpAntecipacao>1</tmpAntecipacao>
<tmpAtraso>14</tmpAtraso>
<tempoPreparacao>
<TempoDePreparacao>
<id>1</id>
<tempoPreparacao>25</tempoPreparacao>
</TempoDePreparacao>
<TempoDePreparacao>
<id>2</id>
<tempoPreparacao>4</tempoPreparacao>
</TempoDePreparacao>
<TempoDePreparacao>
<id>3</id>
<tempoPreparacao>4</tempoPreparacao>
</TempoDePreparacao>
<TempoDePreparacao>
<id>4</id>
<tempoPreparacao>11</tempoPreparacao>
</TempoDePreparacao>
<TempoDePreparacao>
<id>5</id>
<tempoPreparacao>0</tempoPreparacao>
</TempoDePreparacao>
<TempoDePreparacao>
<id>6</id>
<tempoPreparacao>17</tempoPreparacao>
</TempoDePreparacao>
<TempoDePreparacao>
<id>7</id>
<tempoPreparacao>41</tempoPreparacao>
</TempoDePreparacao>
</tempoPreparacao>
</Tarefa>

Pessoal desde já agradeço e peço desculpas.

att

4 Respostas

davidbuzatto

Oi Saulo, seja bem vindo!
Primeiramente, gostaria que você desse uma lida nos seguintes tópicos:
http://www.guj.com.br/posts/list/39020.java
http://www.guj.com.br/posts/list/15777.java
http://www.guj.com.br/posts/list/50115.java

Neles você vai conhecer um pouco das regras do fórum, além de aprender a postar seu código fonte de forma correta.
Quanto ao seu código, trabalhar dessa forma com parse de XML pode ser um pouco cansativo e propenso a erros.
Recomendo que você use algum framework para trabalhar com XML, como por exemplo o Simple XML (http://simple.sourceforge.net/).
Outra sugestão, caso continue a usar a forma que está usando (que como falei desencorajo), uma dica é não usar a classe Vector.
É uma uma implementação de uma lista que vem de antes da implementação do Collections Framework. A partir da implementação das collections no Java, o recomendável é utilizar classes que herdam de java.util.List (menos o vector) para trabalhar com listas.

[]´s

renzonuccitelli

Leia nesse link Sobre anotação BeforeElement. Ele faz exatamente o que vc está querendo.

[]s

saulo.costa

Obrigado pelas informações davidbuzatto, achei mto interessante e convincente.

Obrigado tbm pelo esquema do Simples, achei mto interessante.

abraços

saulo.costa

Obrigado renzonuccitelli, mas optei por fazer pelo Simples e deu certo.

Mas agradeço pelas informações.

abraços

Criado 29 de setembro de 2010
Ultima resposta 30 de set. de 2010
Respostas 4
Participantes 3