DOM - Como testar se um NodeValue é nulo

7 respostas
R

Fala galera … estou começando com java e espero que possam me ajudar por favor …

estou fazendo a leitura de um XML, mas em determinado nó preciso saber se o nodeValue é nulo ou não para poder adiciona-lo a uma String … só que tenho o seguinte problema quando ele realmente é nulo cai dentro da exceção (NullPointerException) e não consigo verificar … alguem pode me dar uma força ??

abraço a todos … fico no agurado

7 Respostas

fantomas

Se entendi direito o que vc está dizendo, vc deve verificar se o nó é nulo antes de obter o valor senão irá causar uma exception mesmo.

O ideal é que vc coloque no post a parte do código que está com problema para facilitar nossa análise; não esqueça de utilizar a tag CODE.

Bem vindo ao forum!

flws

R

exatamente isso fantomas … preciso verificar o valor do nó pois se ele não existir não posso concatena-lo a String conteudo, mas o problema é que ele entra na exceção … então queria uma alternativa para fazer isto

o trecho que tentei usar é o seguinte:

if(destNodes.getElementsByTagName("IE").getLength()>0){ //Aqui verifico se o nó existe, até aqui tudo bem
       
       //mas aqui só de fazer referencia ao NodeValue ja entra na exceção NullPointerException
       if(destNodes.getElementsByTagName("IE").item(0).getFirstChild().getNodeValue() == null){ 
		conteudo += destNodes.getElementsByTagName("IE").item(0).getFirstChild().getNodeValue()+"|";
	}
}

Por enquanto obrigado
abraço

T

Provavelmente você terá de ficar testando cada um dos retornos de getAlgumaCoisa() para ver se não retornam null.

Enquanto o Java 7 não vem, você vai ter de fazer isso mesmo (que chato, não?)

No Java 7 você poderia escrever:

if (destNodes?.getElementsByTagName("IE")?.item(0)?.getFirstChild()?.getNodeValue() == null)
    ...

A idéia é que se algum método retornar null ao usarmos “?.” em vez de “.”, o resto da expressão não é calculado e retornamos “null” mesmo.

Para mais detalhes, veja a proposta do operador “?.” que está proposto para ser implementado no Java 7.

http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html

R

thingol … não entendi muito bem … poderia me dar um exemplo … pois desta forma que tentei na condicional ja cai na exceção … :x

B

Teste de destNodes é diferente de null, se getElementsByTagName(“IE”) é diferente de null, e se item(0), getFirstChilds e getNodeValue também o são.

T

A idéia é a seguinte: cada método pode retornar null ou não. Se retornar null, você não pode continuar. O que ocorre é que você tem de testar contra null a cada vez que anda nessa sua expressão gigantesca. Além disso, é aconselhável acrescentar algumas variáveis temporárias para acumular o resultado de expressões lentas para serem executadas, como é o caso de destNodes.getElementsByTagName(), que tem de percorrer o XML DOM inteirinho para criar uma lista de Element.

// Original - o que você queria fazer, mas não dá ainda 
// porque o Java não aceita ainda o "?." que existe no Groovy
String nodeValue = destNodes?.getElementsByTagName("IE")?.item(0)?.getFirstChild()?.getNodeValue();
if (nodeValue != null)...
// O que você teria de fazer - haja paciência, mas é assim mesmo
NodeList elementsIE = null;
String nodeValue = null;
if (destNodes != null
   && (elementsIE = destNodes.getElementsByTagName ("IE")) != null
   && elementsIE.item(0) != null
   && elementsIE.item(0).getFirstChild() != null
   && (nodeValue = elementsIE.item(0).getFirstChild().getNodeValue()) != null) 
...
R

ahh … agora sim … funcionou … :smiley:

galera brigadão mesmo … sou novo no forum mas ja achei super legal … espero poder contribuir tbm …

abraço a todos … té +

Criado 15 de julho de 2009
Ultima resposta 16 de jul. de 2009
Respostas 7
Participantes 4