2
respostas

Deserialização de varias tags

Estou tentando pegar somente alguns elementos dentro de um XML porem esse XML vem com varias tags. Exempllo:

<Tipo_Origem>
  <MsgData>
    <Transaction>
      <Livro class="R">
        <Titulo>info1</Titulo>
        <Autor>info2</Autor>
        <Paginas>info3</Paginas>
          <outrasInfos>Infos que não preciso </outrasInfos>
        <Localidades class="R">
            ...
        </Localidades>
      </Livro>
    </Transaction>
  </MsgData>
</Tipo_Origem>

Utilizo oxstreamXML.ignoreUnknownElements() para ignorar os parametros que não quero dentro da classe que criei.

public class Tipo_Origem {

    private Titulo;
    private Autor;
    private Paginas;

    ...
}

Na classe principal adiciona os aliasField de acordo com cada e utilizo o ignoreUnknown porem ao fazer o cast e receber a resposta essas infos vem nula do XML que contem as infos. Qual seria a forma correta de fazer essa questão?

2 respostas

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O XML nao aparece na pergunta, segue a imagem

Olá João, tudo bem com você?

Peço desculpas pela demora em obter um retorno.

Uma das forms de ignorar as tags <Titulo>, <Autor> e <Paginas> do seu XML ao realizar o parsing é fazer um loop que ignora estas tags, por exemplo:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class TesteXML {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse("arquivo.xml");

            Element root = document.getDocumentElement();

            NodeList livros = root.getElementsByTagName("Livro");

            for (int i = 0; i < livros.getLength(); i++) {
                Node livro = livros.item(i);

                NodeList elementosDesejados = ((Element) livro).getElementsByTagName("*");
                for (int j = 0; j < elementosDesejados.getLength(); j++) {
                    Node elemento = elementosDesejados.item(j);
                    String tagName = elemento.getNodeName();

                    if (!tagName.equals("Titulo") && !tagName.equals("Autor") && !tagName.equals("Paginas")) {
                        System.out.println(tagName + ": " + elemento.getTextContent());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Neste exemplo, adicionamos um loop interno para percorrer todos os elementos filhos de <Livro>. Em seguida, verificamos se o nome da tag do elemento é diferente de "Titulo", "Autor" e "Paginas". Se for diferente, podemos considerar que é um elemento desejado e fazer algo com ele (como imprimir seu conteúdo). Dessa forma, os elementos indesejados serão ignorados. Todavia, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software