1
resposta

Selecionar uma tag com criterio da tag pai

No código abaixo nós estamos pegando o valor da tag pelo qName ou seja pela tag do XML

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
    if(qName.equals("produto")) {
        produtos.add(produto);
    }

    else if(qName.equals("nome")) {
        produto.setNome(conteudo.toString());
    }
    else if(qName.equals("preco")) {
        Double preco = Double.parseDouble(conteudo.toString());
        produto.setPreco(preco);
    }
}

E quando nós tiver que pegar o valor da tag só quando a tag pai for tal nome Exemplo: No XML da nota fiscal como abaixo temo 2 tags CNPJ para nós saber se a nota da empresa é uma nota de entrada ou saída eu preciso só do CNPJ do emitente que está na tag emit Como faço para pegar só o CNPJ da tag emit usando a class DefaultHandler

Nota fiscal foi um exemplo que eu achei

<emit>
    <CNPJ>Aqui tem  o cnpj do emitente</CNPJ>
</emit>
<dest>
<CNPJ>Aqui tem  o cnpj do destinatário</CNPJ>
    </dest>
1 resposta

Olá, Marcio, tudo bem?

Desde já peço desculpas pela demora em obter retorno.

Para pegar apenas o valor da tag "CNPJ" quando a tag pai for "emit", você pode fazer uma pequena modificação no código que você compartilhou.

Uma solução para o cenário que você apresentou é inserir dentro do método endElement uma condição para verificar se a tag pai é "emit" antes de pegar o valor da tag "CNPJ". Ficaria assim:

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
    if(qName.equals("produto")) {
        produtos.add(produto);
    }

    else if(qName.equals("nome")) {
        produto.setNome(conteudo.toString());
    }
    else if(qName.equals("preco")) {
        Double preco = Double.parseDouble(conteudo.toString());
        produto.setPreco(preco);
    }
    else if(qName.equals("CNPJ") && getParentTag().equals("emit")) {
        String cnpj = conteudo.toString();
        // Faça o que você precisa com o CNPJ do emitente
    }
}

Adicionei um novo else if que verifica se a tag é "CNPJ" e se a tag pai é "emit" (utilizando o método getParentTag() que você precisa implementar). Dentro dessa condição, você pode fazer o que precisa com o valor do CNPJ do emitente.

Todavia, vale ressaltar que como você postou sua pergunta há algum tempo é possível que a constante evolução da tecnologia impacte na resolução da sua dúvida. Sendo assim, caso queira se aprofundar neste tema e com conteúdos atualizados, recomendo os materiais abaixo:

Espero ter ajudado.

Abraços e bons estudos!