Il metodo migliore per analizzare vari documenti XML personalizzati in Java

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

  •  09-06-2019
  •  | 
  •  

Domanda

Qual è il metodo migliore per analizzare documenti XML multipli, discreti e personalizzati con Java?

È stato utile?

Soluzione

io userei Stax per analizzare XML, è veloce e facile da usare.L'ho usato nel mio ultimo progetto per analizzare file XML fino a 24 MB.C'è una bella introduzione su java.net, che ti dice tutto ciò che devi sapere per iniziare.

Altri suggerimenti

Fondamentalmente, in Java sono disponibili due metodi principali di analisi XML:

  • SAX, dove usi un gestore per prendere solo ciò che desideri nel tuo XML e abbandonare il resto
  • DOM, che analizza il tuo file da sempre e ti consente di catturare tutti gli elementi in modo più simile ad un albero.

Un altro metodo di parsing XML molto utile, anche se un po' più recente di questi, e incluso in JRE solo a partire da Java6, è StAX.StAX è stato concepito come un metodo intermedio tra l'approccio basato sugli alberi del DOM e l'approccio basato sugli eventi di SAX.È abbastanza simile a SAX nel fatto che l'analisi di documenti molto grandi è semplice, ma in questo caso l'applicazione "estrae" informazioni dal parser, invece di "inviare" eventi all'applicazione.Puoi trovare ulteriori spiegazioni su questo argomento Qui.

Quindi, a seconda di ciò che desideri ottenere, puoi utilizzare uno di questi approcci.

Ti consigliamo di utilizzare org.xml.sax.XMLReader (http://docs.oracle.com/javase/7/docs/api/org/xml/sax/XMLReader.html).

Se hai solo bisogno di analizzare, consiglierei di utilizzare la libreria XPath.Ecco un bel riferimento: http://www.ibm.com/developerworks/library/x-javaxpathapi.html

Ma potresti prendere in considerazione l'idea di trasformare gli XML in oggetti e quindi il cielo è il limite.Per questo puoi usare XStream, questa è un'ottima libreria che uso molto

Usa il dom4j biblioteca

Per prima cosa leggi il 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;
    }
}

Quindi usa XPATH per ottenere i valori che ti servono

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

Di seguito è riportato il codice per estrarre un valore value utilizzando 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));
        }   
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top