Извлечь данные XML из файла GZIP с помощью Apache Тика? - PullRequest
0 голосов
/ 16 августа 2010

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

Нужно ли использовать DelegateParser в Тика для извлечения данных из 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();
            }
    }


}

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Вам не хватает установки рекурсивного синтаксического анализатора в ParseContext.Вы, вероятно, хотите что-то вроде:

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

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

0 голосов
/ 02 апреля 2017

Вот как вы можете использовать анализатор 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));
...