Melhor método para analisar vários documentos XML personalizados em Java

StackOverflow https://stackoverflow.com/questions/23106

  •  09-06-2019
  •  | 
  •  

Pergunta

Qual é o melhor método para analisar vários documentos XML discretos e personalizados com Java?

Foi útil?

Solução

eu usaria Stax para analisar XML, é rápido e fácil de usar.Usei-o em meu último projeto para analisar arquivos XML de até 24 MB.Há uma bela introdução em java.net, que informa tudo o que você precisa saber para começar.

Outras dicas

Basicamente, você tem dois métodos principais de análise de XML em Java:

  • SAXOFONE, onde você usa um manipulador pegar apenas o que você deseja em seu XML e descartar o resto
  • DOM, que analisa seu arquivo o tempo todo e permite capturar todos os elementos de uma forma mais semelhante a uma árvore.

Outro método de análise XML muito útil, embora um pouco mais recente que estes, e incluído no JRE apenas a partir do Java6, é StAX.StAX foi concebido como um método intermediário entre a abordagem baseada em árvore do DOM e a abordagem baseada em eventos do SAX.É bastante semelhante ao SAX no fato de que a análise de documentos muito grandes é fácil, mas neste caso o aplicativo "puxa" informações do analisador, em vez de analisar os eventos "empurrando" para o aplicativo.Você pode encontrar mais explicações sobre este assunto aqui.

Portanto, dependendo do que você deseja alcançar, você pode usar uma dessas abordagens.

Você vai querer usar org.xml.sax.XMLReader (http://docs.oracle.com/javase/7/docs/api/org/xml/sax/XMLReader.html).

Se você precisar apenas analisar, recomendo usar a biblioteca XPath.Aqui está uma boa referência: http://www.ibm.com/developerworks/library/x-javaxpathapi.html

Mas você pode considerar transformar XMLs em objetos e então o céu é o limite.Para isso você pode usar XStream, esta é uma ótima biblioteca que eu uso muito

Use o dom4j biblioteca

Primeiro leia o documento

import java.net.URL;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Foo {

    public Document parse(URL url) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
}

Em seguida, use XPATH para obter os valores necessários

public void get_author(Document document) {
    Node node = document.selectSingleNode( "//AppealRequestProcessRequest/author" );
    String author = node.getText();
    return author;
}

Abaixo está o código para extrair algum valor de valor usando vtd-xml.

import com.ximpleware.*;

public class extractValue{
    public static void  main(String s[]) throws VTDException, IOException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false));
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/aa/bb[name='k1']/value");
        int i=0;
        while ((i=ap.evalXPath())!=-1){
            System.out.println(" value ===>"+vn.toString(i));
        }   
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top