2008-08-22 11 views
7

Jaka jest najlepsza metoda analizy wielu różnych, nieciągłych, niestandardowych dokumentów XML za pomocą Java?Najlepsza metoda do analizy różnych niestandardowych dokumentów XML w Javie

+1

Pokaż nam, jak daleko masz - nie zamierzamy tego napisać dla Ciebie. Czy chcesz to zrobić z DOM, SAX lub innymi? Które próbowałeś do tej pory? Które samouczki/dokumentacja obejrzeliście? – mdm

+0

Używaj java dom api lub sax do parsowania xml. Daj więcej konkretnej struktury xml. – 0xAX

+0

Spróbuj mapować [castor] (http://www.castor.org/xml-mapping.html). – nIKUNJ

Odpowiedz

5

Chciałbym użyć Stax do parsowania XML, jest szybki i łatwy w użyciu. Używałem go w moim ostatnim projekcie do parsowania plików XML do 24 MB. Jest ładne wprowadzenie na temat java.net, które mówi wszystko, co musisz wiedzieć, aby zacząć.

4

Zasadniczo istnieją dwie główne metody analizowania XML w Javie:

  • SAX, gdzie używasz handler do tylko chwycić co chcesz w formacie XML i rów odpoczynku
  • DOM, który analizuje swoje plik cały czas i pozwala pobrać wszystkie elementy w bardziej przypominający drzewa sposób.

Inną bardzo użyteczną metodą analizowania XML, choć nieco nowszą od tej, i włączoną do JRE tylko od wersji Java 6, jest StAX. StAX został pomyślany jako metoda medialna między drzewem opartym na DOM a podejściem SAX opartym na zdarzeniach. Jest to bardzo podobne do SAX-a, ponieważ parsowanie bardzo dużych dokumentów jest łatwe, ale w tym przypadku aplikacja "pobiera" informacje z analizatora składni, zamiast parsowania "pchających" zdarzeń do aplikacji. Możesz znaleźć więcej wyjaśnień na ten temat here.

Tak więc, w zależności od tego, co chcesz osiągnąć, możesz użyć jednego z tych podejść.

+0

skopiowałem z mojej odpowiedzi na duplikat wątku, aby dostarczyć więcej informacji o różnych metodach –

2

Użyj dom4j biblioteki

Najpierw należy przeczytać dokument

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; 
    } 
} 

Następnie za pomocą XPath do dostać się do wartości, które trzeba

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

Poniżej znajduje się kod wyodrębniania niektórych wartości wartości za pomocą 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)); 
     } 
    } 
} 
Powiązane problemy