Ler tag Arquivo XML

04/08/2011

0

Bom dia.   Estou com dificuldades de ler a tag - <Campo_Extra> a tag - <Resposta> leio normalmente, a diferença delas é que no caso da tag - <Campo_Extra> existem duas conforme o código xml abaixo:   Alguém já passou por isso?   - <Itens>
- <Item>
  <Id_Artigo>123456</Id_Artigo>
  <Cod_Produto>34</Cod_Produto>
  <Quantidade>2100</Quantidade>
- <Campo_Extra>
  <Nome>justificativa</Nome>
  <Valor>MENOR PREÇO NÃO TESTADO ANTERIORMENTE NA INSTITUIÇÃO. 2º MENOR PREÇO APRESENTA PARECER DESFAVORÁVEL.</Valor>
  </Campo_Extra>
- <Campo_Extra>
  <Nome>Qtd_Embalagem</Nome>
  <Valor>100</Valor>
  </Campo_Extra>
- <Resposta>
  <CNPJ>11.888.555/0001-27</CNPJ>
  <Fabricante>EQFLEX</Fabricante>
  <Embalagem>CX</Embalagem>
  <Preco_Unitario>2.3000</Preco_Unitario>
  <Preco_Total>4830.0000</Preco_Total>
  <Comentario>-</Comentario>
  </Resposta>
  </Item>    Desde já agradeço a ajuda.   Atenciosamente R. Barcelos.
Barcelos.java

Barcelos.java

Responder

Posts

04/08/2011

Davi Costa

Na tag itens vc pde ter vários item não é isso?
Se já estiver assim e funcionando, vc faz o mesmo tratamento pata item que pode ter vários campo_extra.
att Davi
Responder

04/08/2011

Barcelos.java

Tudo bem. mas vc percebeu que existem dois <Campo_Extra>   é isso que está dificultando pra mim.   gostaria de uma dica.   estou te enviando o metodo que eu trato a tag item queria apenas uma dica ou melhor para saber como posso inserir essas duas tags <Campo_Extra>    // OBTER E INSERIR COTACOES
 private Set<CotacaoItem> obterCotacoes(Document doc, SolicitacaoFornecedor solForn) {
  Set<CotacaoItem> cotacoes = new HashSet<CotacaoItem>();
  
  // REFERENCIA DO OBJETO XML
  Element elem = doc.getDocumentElement();
  
  NodeList itens = elem.getElementsByTagName("Item");
  
  for (int i = 0; i < itens.getLength(); i++) {
   Element item = (Element)itens.item(i);
   
   //Obter código produto
   Integer codProdutoPadrao = Integer.valueOf(getChildTagValue(item, "Cod_Produto"));
   
   //Obter quantidade
   Integer qtde = Integer.valueOf(getChildTagValue(item, "Quantidade"));
   
   int erro = 0;
   String cnpj = "";
   try {
    //Buscar solicitacao-item
    SolicitacaoItem solicItem = solicitacaoItemFacade.buscarSolicitacaoItemPorCodProduto(solForn.getSolicitacao().getIsnSolicitacao(), codProdutoPadrao);
    erro++;
    
    //Obter respostas
    NodeList respostas = item.getElementsByTagName("Resposta");
    for (int j = 0; j < respostas.getLength(); j++) {      //Obter resposta
     Element resposta = (Element)respostas.item(j);
     
     //Obter Cnpj
     cnpj = getChildTagValue(resposta, "CNPJ");
     
     if (cnpj.equals(solForn.getFornecedor().getNumCnpj())) {       // OBTER PREÇO UNITÁRIO
      Double precoUnitario = Double.valueOf(getChildTagValue(resposta, "Preco_Unitario"));
      // 19/01/2011
      String marca = String.valueOf(getChildTagValue(resposta, "Fabricante"));
      
      String apresentacao = String.valueOf(getChildTagValue(resposta, "Embalagem"));
      
      // CRIAR COTAÇÃO
      CotacaoItem cotacaoItem = new CotacaoItem();
      cotacaoItem.setIsnUsuario(JSFUtil.obterUsuarioSessao().getIsnUsuario());
      cotacaoItem.setSolicitacaoItem(solicItem);
      cotacaoItem.setSolicitacaoFornecedor(solForn);
      // QUANTIDADE CONFIRMADA
      cotacaoItem.setQtdDisponivelFornecedor(new Double(qtde));
      cotacaoItem.setVlrItemInicial(precoUnitario);
      cotacaoItem.setDscItem(solicItem.getDscItem());
      
      // PRAZO ENTREGA
      cotacaoItem.setNumPrazoEntrega(solForn.getQtdPrazoEntrega());
      
                        // 05/05/2011
      cotacaoItem.setDscTipoFornecimento(apresentacao);
      // 19/01/2011
      cotacaoItem.setDscMarca(marca);
      // 19/01/2011
      cotacaoItem.setFlgFinaliza(false);
      
      TipoParecer tpParecer = tpParecerFacade.buscarParecer(TipoParecerFacade.ISN_TIPO_PARECER.FAVORAVEL.ordinal());
      cotacaoItem.setTipoParecer(tpParecer);
      
      //Inserir cotação na lista
      cotacoes.add(cotacaoItem);
     }
    }
   } catch(RuntimeException e) {
    e.printStackTrace();
    
    if (erro == 0)
     MessagesUtil.inserirErro("Erro ao buscar item de solicitacao com código de produto igual a "+codProdutoPadrao);
    else if (erro == 1)
     MessagesUtil.inserirErro("Erro ao buscar fornecedor com CNPJ igual a "+cnpj);     else
     MessagesUtil.inserirErro("Erro ao inserir cotação para produto "+codProdutoPadrao+" e fornecedor com CNPJ "+cnpj);
    throw e;
   }
  }
  return cotacoes;
 }     att R. Barcelos
   
Responder

04/08/2011

Barcelos.java

Tudo bem. mas vc percebeu que existem dois <Campo_Extra>   é isso que está dificultando pra mim.   gostaria de uma dica.   estou te enviando o metodo que eu trato a tag item queria apenas uma dica ou melhor para saber como posso inserir essas duas tags <Campo_Extra>    // OBTER E INSERIR COTACOES
 private Set<CotacaoItem> obterCotacoes(Document doc, SolicitacaoFornecedor solForn) {
  Set<CotacaoItem> cotacoes = new HashSet<CotacaoItem>();
  
  // REFERENCIA DO OBJETO XML
  Element elem = doc.getDocumentElement();
  
  NodeList itens = elem.getElementsByTagName("Item");
  
  for (int i = 0; i < itens.getLength(); i++) {
   Element item = (Element)itens.item(i);
   
   //Obter código produto
   Integer codProdutoPadrao = Integer.valueOf(getChildTagValue(item, "Cod_Produto"));
   
   //Obter quantidade
   Integer qtde = Integer.valueOf(getChildTagValue(item, "Quantidade"));
   
   int erro = 0;
   String cnpj = "";
   try {
    //Buscar solicitacao-item
    SolicitacaoItem solicItem = solicitacaoItemFacade.buscarSolicitacaoItemPorCodProduto(solForn.getSolicitacao().getIsnSolicitacao(), codProdutoPadrao);
    erro++;
    
    //Obter respostas
    NodeList respostas = item.getElementsByTagName("Resposta");
    for (int j = 0; j < respostas.getLength(); j++) {      //Obter resposta
     Element resposta = (Element)respostas.item(j);
     
     //Obter Cnpj
     cnpj = getChildTagValue(resposta, "CNPJ");
     
     if (cnpj.equals(solForn.getFornecedor().getNumCnpj())) {       // OBTER PREÇO UNITÁRIO
      Double precoUnitario = Double.valueOf(getChildTagValue(resposta, "Preco_Unitario"));
      // 19/01/2011
      String marca = String.valueOf(getChildTagValue(resposta, "Fabricante"));
      
      String apresentacao = String.valueOf(getChildTagValue(resposta, "Embalagem"));
      
      // CRIAR COTAÇÃO
      CotacaoItem cotacaoItem = new CotacaoItem();
      cotacaoItem.setIsnUsuario(JSFUtil.obterUsuarioSessao().getIsnUsuario());
      cotacaoItem.setSolicitacaoItem(solicItem);
      cotacaoItem.setSolicitacaoFornecedor(solForn);
      // QUANTIDADE CONFIRMADA
      cotacaoItem.setQtdDisponivelFornecedor(new Double(qtde));
      cotacaoItem.setVlrItemInicial(precoUnitario);
      cotacaoItem.setDscItem(solicItem.getDscItem());
      
      // PRAZO ENTREGA
      cotacaoItem.setNumPrazoEntrega(solForn.getQtdPrazoEntrega());
      
                        // 05/05/2011
      cotacaoItem.setDscTipoFornecimento(apresentacao);
      // 19/01/2011
      cotacaoItem.setDscMarca(marca);
      // 19/01/2011
      cotacaoItem.setFlgFinaliza(false);
      
      TipoParecer tpParecer = tpParecerFacade.buscarParecer(TipoParecerFacade.ISN_TIPO_PARECER.FAVORAVEL.ordinal());
      cotacaoItem.setTipoParecer(tpParecer);
      
      //Inserir cotação na lista
      cotacoes.add(cotacaoItem);
     }
    }
   } catch(RuntimeException e) {
    e.printStackTrace();
    
    if (erro == 0)
     MessagesUtil.inserirErro("Erro ao buscar item de solicitacao com código de produto igual a "+codProdutoPadrao);
    else if (erro == 1)
     MessagesUtil.inserirErro("Erro ao buscar fornecedor com CNPJ igual a "+cnpj);     else
     MessagesUtil.inserirErro("Erro ao inserir cotação para produto "+codProdutoPadrao+" e fornecedor com CNPJ "+cnpj);
    throw e;
   }
  }
  return cotacoes;
 }     att R. Barcelos
   
Responder

04/08/2011

Davi Costa

Vc n fez uma iteração na tag item, dentro dessa iteração faça outra iteração com o campo_extra, presumesse que seu modelo no java seu item tenha uma lista campo extra.

att Davi
Responder

04/08/2011

Barcelos.java

Então como faço essa iteração?   Att R. Barcelos
Responder

04/08/2011

Davi Costa

NodeList campos = item.getElementsByTagName("campo_observacao"); vc faz isso dentro do seu loop. E faz um for. att Davi
Responder

05/08/2011

Dyego Carmo

Opa !

Resolvido ?

Se sim, por favor feche o chamado :)

Valeu !

ps: USE JAXB , fuja destas leituras na mao !

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar