Estou usando a API JDOM e gostaria de ler meu xml por partes.Meu xml é constituído de um nó raiz ao qual são adcionados vários filhos. O tamanho do meu xml é muito grande, por isso exite a necessidade de ler, por exemplo , de 10 em 10 filhos . A busca no meu xml gostaria q fosse algo do tipo : Pegue 10 filhos, se nenhum desses filhos é o procurado vá ao xml e pegue mais 10 , faça isso até encontrar o filho desejado ou chegar ao final do arquivo. Meu código no momento está assim :
// Aqui você informa o nome do arquivo XML.
File f = new File("Material.xml");
//Criamos uma classe SAXBuilder que vai processar o XML4
SAXBuilder sb = new SAXBuilder();
//Este documento agora possui toda a estrutura do arquivo.
Document d = sb.build(f);
// Recuperamos o elemento root
Element material = d.getRootElement();
//Recuperamos os elementos filhos (children)
List elements = material.getChildren();
Iterator i = elements.iterator();
Note que, ao fazer Document d = sb.build(f), todo o arquivo será carregado em memória. O problema reside ai. Torna-se inviavel fazer isso quando o arquivo xml é enorme !!
Parece que com o XPath do Java 5 o documento em si não é carregado todo na memória, já que InputSource é uma classe do pacote SAX. E também parece que dá pra pegar um NodeSet com uma expressão XPath. Então você vai mudando a expressão até ter tudo o que quer. Entendeu? Dá uma olhada nessas documentações, e no artigo que te indiquei no outro tópico:
Eu no teu lugar, depois de ver o que é SAX e o XPath do Java 5, do ponto de vista de facilidade e abstração usaria XPath.
E bem que o JDOM poderia ter alguma solução né, tipo eu pegar um ou mais elementos do documento sem criar o Document, ou seja, ele retornar uma parte do XML direto, usando XPath. Ou então melhor, especificando regras tipo o Digester e o JDOM retornar só essas partes.
Aliás se você está procurando por um elemento específico, dependendo da lógica de seleção para mim seria mais um motivo para usar o Java 5 XPath. Ele faz a seleção sozinho para você, sem você precisar ficar percorrendo cada nó e testando-o.