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=newSAXReader(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?
Só para ver se é isso mesmo, execute o seu comando N vezes dentro do seu programa; você vai ver que só o primeiro arquivo é que leva esse 1 minuto
Para ter uma idéia, para iniciar o Eclipse na máquina quando o antivírus está ligado, deixo iniciando e vou tomar um café.
Se estou com o antivirus desligado, ele inicia muito mais rapidamente
felipe_gdr
Fiz um teste com o Stax e não deu muita diferença não…
System.out.println(newDate());InputStreamin=newFileInputStream(arquivoXml);XMLInputFactoryfactory=XMLInputFactory.newInstance();XMLStreamReaderparser=factory.createXMLStreamReader(in);System.out.println(newDate());for(intevent=parser.next();event!=XMLStreamConstants.END_DOCUMENT;event=parser.next()){// demora cerca de 1 minuto para passar dessa linha e entrar no forSystem.out.println(newDate());.....}
Está demorando mais ou menos o mesmo tempo para passar da linha aonde é iniciada iteração.
Olha, acho que isso não tem muito a ver… rs.
jaboot
Foi mal então
Pelo menos nos sites, dizem que ele é o parser mais rápido do oeste
felipe_gdr
jaboot:
Foi mal então
Pelo menos nos sites, dizem que ele é o parser mais rápido do oeste
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.