2010-08-16 3 views
0

Я работаю над проектом, в котором мне нужно извлечь данные из xml (sitemap) из gz-файла, используя apache tika [AM NEW TO TIKA]. имя fie что-то вроде sitemap01.xml.gz Я мог извлечь данные из обычного текстового файла или html, но я не знаю, как извлечь xml из gz и извлечь мета и данные из xml ... Я искал Google за последние два дня.Извлечь XML-данные из файла gzip с помощью apache tika?

Нужно ли использовать делегат-парсер в tika для извлечения данных из xml? Просьба направить меня в какой-то образец или статьи ....

Вот моя попытка

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


} 

ответ

1

Что вам не хватает устанавливает рекурсивный парсер на вашем ParseContext. Вы, наверное, хотите что-то вроде:

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

Устанавливая Parser на ParseContext, вы говорите Тику называть, что, когда он встречает встроенные документы (например, XML внутри вашего GZip)

0

Вот как вы можете используйте XML-парсер из Apache Tika для вашего дела:

//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)); 
Смежные вопросы