Estou criando uma rotina que irá ler centenas de arquivos XML (são páginas JSF) para procurar por um determinado conteúdo. Não preciso navegar pelo documento inteiro, então acho que o SAX seria a opção mais indicada.
Fiz um teste usando o dom4j e fiz o parse de um arquivo de 128 linhas, conforme abaixo:
raizPag = new SAXReader(false).read(arquivoPagina);
aonde arquivoPagina é o tal arquivo de 128 linhas. Esse comando levou 1 minuto para terminar! Esse tempo para mim é inviável…
Gostaria de saber se a comunidade conhece alguma maneira de fazer essa busca de maneira mais rápida. Achei alguns tópicos sobre isso, mas são todos muito antigos…
O problema é que para fazer essa busca, preciso do rootElement, e para obter o rootElement preciso fazer o parse… E o que demora é o parse, a busca em si é bem rápida.
Agora, se tem como fazer a busca usando xPath sem fazer o parse, aí eu não sei. Você saberia dizer?
Fiz um teste com o Stax e não deu muita diferença não…
System.out.println(new Date());
InputStream in = new FileInputStream(arquivoXml);
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader parser = factory.createXMLStreamReader(in);
System.out.println(new Date());
for (int event = parser.next(); event != XMLStreamConstants.END_DOCUMENT; event = parser.next()) { // demora cerca de 1 minuto para passar dessa linha e entrar no for
System.out.println(new Date());
.....
}
Está demorando mais ou menos o mesmo tempo para passar da linha aonde é iniciada iteração.
Pelo menos nos sites, dizem que ele é o parser mais rápido do oeste[/quote]
Pois é também vi esses comentários. Porém tá demorando muito! rsrs.
Estou fazendo uns testes com apache commons io, usando FileUtils.readLines() e depois fazendo a busca meio que na mão. Vai muuuito mais rápido, e para o que eu preciso acho que vai funcionar de boa.