2010-08-16 15 views
0

Je travaille sur un projet dans lequel j'ai besoin d'extraire des données xml (sitemap) du fichier gz en utilisant apache tika [AM NEW TO TIKA]. le nom de fie est quelque chose comme sitemap01.xml.gz Je pourrais extraire des données à partir du fichier texte normal ou html, mais je ne sais pas comment extraire xml de gz et extraire le méta et les données de xml ... J'ai cherché Google pour les deux derniers jours.Extraire les données XML du fichier gzip en utilisant apache tika?

Ai-je besoin d'utiliser delegateParser dans tika pour extraire des données de xml? S'il vous plaît me guider à certains échantillons ou articles ....

Voici mon essai

public void parseXml() throws IOException{ 
    Metadata metadata = new Metadata(); 
    ContentHandler handler = new BodyContentHandler(); 
    Parser parser = new AutoDetectParser(); 
    ParseContext context = new ParseContext(); 
    InputStream stream =this.getClass().getResourceAsStream("sitemap.xml.gz"); 
    try { 
     parser.parse(stream,handler,metadata,context); 
     for(int i = 0; i <metadata.names().length; i++) { 
      String name = metadata.names()[i]; 
      System.out.println(name + " : " + metadata.get(name)); 
      } 
     System.out.println(handler.toString()); 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (TikaException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }finally{ 
     if(stream!=null) { 
       stream.close(); 
      } 
    } 


} 

Répondre

1

La chose vous manque est la fixation d'un analyseur de récursion sur votre ParseContext. Vous voulez sans doute quelque chose comme:

Parser parser = new AutoDetectParser(); 
ParseContext context = new ParseContext(); 
context.set(Parser.class, parser); 
parser.parse(....) 

En définissant un Parser sur le ParseContext, vous dites Tika appeler que lorsqu'il rencontre des documents intégrés (tels que le XML dans votre GZip)

0

Voici comment vous pouvez utiliser l'analyseur XML d'Apache Tika pour votre cas:

//detecting the file type 
    BodyContentHandler handler = new BodyContentHandler(-1); 
    Metadata metadata = new Metadata(); 
    File inFile = new File("sitemap.xml.gz"); 
    System.out.println(inFile.isFile()); 
    FileInputStream inputstream = new FileInputStream(inFile); 
    ParseContext pcontext = new ParseContext(); 

    //Xml parser 
    XMLParser xmlparser = new XMLParser(); 
    xmlparser.parse(inputstream, handler, metadata, pcontext); 
    System.out.println(pcontext.toString()); 

    System.out.println("Contents of the document:" + handler.toString());//this one contains all contents from xml files and tags are also removed 
    System.out.println("Metadata of the document:"); 
    String[] metadataNames = metadata.names(); 

    for(String name : metadataNames) { 
    System.out.println(name + ": " + metadata.get(name));