Como ler XML com tags que podem não ser obrigatórias no XML?

2 respostas
mateusviccari

Olá, tenho que fazer um sistema que leia XML's de NFe, aonde tem tags do XML que podem não existir no XML. Eu tenho um exemplo assim pra ler o xml:

//Expressão XPath
        String expression = "//NFe//ide/cUF";
        String xmlPath = "C:/NFe.xml";
        //@Document: Interface que representa o documento XML
        Document doc;
        //@DocumentBuilder: Utilizada para construir um @Document do arquivo XML em questão
        DocumentBuilder builder;
        //@DocumentBuilderFactory: Cria uma nova instância de um @DocumentBuilder
        DocumentBuilderFactory domBuilder = DocumentBuilderFactory.newInstance();
        //@XPath: Interface que fornece o acesso ao ambiente e expressões XPath
        XPath xpath;
 
        try {
            //Constroi os objetos @DocumentBuilder e @Document
            builder = domBuilder.newDocumentBuilder();
            doc = builder.parse(xmlPath);
            //@XPathFactory usada para criar criar os objetos @XPath
            xpath = XPathFactory.newInstance().newXPath();
 
            //@XPathExpression Interface que fornece acesso às expressões XPath compiladas.
            XPathExpression expr = xpath.compile(expression);
            Object result = expr.evaluate(doc, XPathConstants.NODESET);
            NodeList nodes = (NodeList) result;
 
            //Iteração da lista de NODES
            for (int i = 0; i < nodes.getLength(); i++) {
                //Retorna o texto do NODE "Title"
                System.out.println( nodes.item(i).getTextContent() );
            }                                   
 
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }  catch (XPathExpressionException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

Neste caso a expressão ta procurando pela tag cUF, que sempre vai existir no XML, porém quando tiver uma TAG que não exista e eu tentar procurar por ela na expressão da null pointer exception.
Como posso fazer nesse caso?

2 Respostas

E

Você já deu a resposta à sua própria pergunta: simplesmente teste contra null.

NodeList nodes = (NodeList) result;  
   
             //Iteração da lista de NODES  
             if (nodes != null) {
                 for (int i = 0; i < nodes.getLength(); i++) {  
                     //Retorna o texto do NODE "Title"  
                     System.out.println( nodes.item(i).getTextContent() );  
                 }                                     
             }
mateusviccari

putz valeu, resolvi botar um try catch no metodo que busca pela expressão, assim cada vez que ele for buscar um dado, se nao conseguir encontrar esse dado mandei retornar um java null.

Criado 13 de dezembro de 2011
Ultima resposta 13 de dez. de 2011
Respostas 2
Participantes 2