javaCBA:
Mas a duvida ainda persiste....
e se o arquivo não tiver diretamente ligado ao elemento raiz?
por exemplo....
<texto>
<mensagemGeral>
<mensagem>
<nome>Fulano</nome>
<contato>11111</contato>
</mensagem>
<mensagem>
<nome>Beltrano</nome>
<contato>22222</contato>
</mensagem>
</mensagemGeral>
</texto>
dessa forma eu tambem pego o valor iterando?
Pega sim, basta primeiro vc pegar o elemento mensagemGeral, depois é so fazer pegar o iterator dos elementos dele, e usar em um for ou onde achar conviniente...
Conforme o XML que vc enviou, uma das formas de solicionar é assim:
public static void main(String ... args) throws Throwable {
URL url = new URL("file:///C:/xml.xml");
SAXReader reader = new SAXReader();
final Document document = reader.read(url);
for (Element e : getIterable(document,"mensagemGeral")) {
System.out.println("nome = "+ e.elementText("nome"));
System.out.println("contato = "+ e.elementText("nome"));
}
}
private static Iterable<Element> getIterable(final Document document, final String element) {
return new Iterable<Element>() {
@Override @SuppressWarnings("unchecked")
public Iterator<Element> iterator() {
return document.getRootElement().element(element).elementIterator();
}
};
}
Note que ele busca o elemnto "mensagemGeral", e faz um iterator a partir dele.... e coloca dentro de um Iterable, pra vc usar facilmente em um for
veja que quebrei em 2 métodos... criei um método apenas para montar o Iterable....
os parametros do método getIterable, são:
- "document" que é o documento ao qual deve-se buscar os elementos
- "element" que é uma String com o nome do sub elemento que se deseja criar o Iterable, que no seu caso é "mensagemGeral"
EDIT: apenas para facilitar, os imports usados nesse exemplo são
import java.net.URL;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;