Estou com o seguinte problema tenho um XML que tem algumas informações onde eu preciso pega-las para fazer um insert em uma tabela, o problema é identificar os dados pois tem tags com o mesmo nome no XML, mas ele tem uma hierarquia onde as informações estão seguindo o esquema:
Ex.:
1
Onde algumas tags tem seus filhos que podem ou não ter filhos, preciso identificar as tags para saber de onde estão vindo as informações para o caso de tags que repetem o nome, não sei se ficou clara meu problema mas estou postando o codigo para analise.
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class LoadWithDOM {
public static void main(String[] args) {
try {
teste teste = new teste();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db
.parse("C:\\Documents and Settings\\DEV-3\\Desktop\\contato.xml");
Element elem = doc.getDocumentElement();
System.out.println("O elemento raiz é: " + elem.getNodeName());
NodeList n2 = elem.getChildNodes();
teste.filhosRecursico(n2);
} catch (ParserConfigurationException e) {
System.out.println("Primeiro");
e.printStackTrace();
} catch (SAXException e) {
System.out.println("Segundo");
e.printStackTrace();
} catch (IOException e) {
System.out.println("Terceiro");
e.printStackTrace();
}
}
}
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sun.xml.internal.bind.marshaller.NioEscapeHandler;
public class teste {
public void filhosRecursico(NodeList nl) {
// for que percorre os irmão do No
for (int i = 0; i <= nl.getLength(); i++) {
// Testa para ver se é um elemento
if (nl.item(i) instanceof Element) {
Element elem = null;
if (nl.item(i) == null) {
System.out.println("NULL");
} else {
NodeList node = nl.item(i).getChildNodes();
//testa se tem filhos ou não se tiver chama o metodo novamente
if (node.getLength() > 1) {
elem = (Element) nl.item(i);
System.out.println(elem.getNodeName());
System.out.println(elem.getTextContent());
} else {
filhosRecursico(node);
}
}
}else{
Node node = nl.item(i);
if (node == null){
System.out.println("NULL");
}else{
System.out.println("Else Name "+node.getNodeName());
System.out.println("Else Valor "+node.getTextContent());
}
}
}
}
}
O XML que estou utilizando para testar
<?xml version="1.0" encoding="UTF-8"?>
<agenda>
<contato id="01">
<nome>Maria da Silva</nome>
<endereco>Rua Ficticia, 32, Bairro Ficticio, Ficticia City</endereco>
<telefone>21 - 32658978</telefone>
<email>maria.silva@provedor.com.br</email>
</contato>
<teste>teste</teste>
<teste2>
<teste3>
<teste4>testes</teste4>
</teste3>
</teste2>
<contato2 id="02">
<nome>João da Silva</nome>
<endereco>Rua Inventada, 12, Bairro Inventado, Inventada City</endereco>
<telefone>11 - 24569865</telefone>
<email>joao.silva@provedor.com.br</email>
</contato2>
</agenda>
A classe teste percorre a arvore e imprime as tagas e seus valores mas esta imprimindo linhas em branco e não consigo pegar todas as tags filhas, se alguem puder me ajudar agradeço muito e desculpe se postei no lugar errado.