Melhor método para analisar vários documentos XML personalizados em Java
Pergunta
Qual é o melhor método para analisar vários documentos XML discretos e personalizados com Java?
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));
}
}
}