使用apache tika从gzip文件中提取xml数据?

时间:2010-08-16 19:27:08

标签: apache gzip apache-tika

我正在开发一个项目,我需要使用apache tika [AM NEW TO TIKA]从gz文件中提取xml(站点地图)数据。 这个名字就像sitemap01.xml.gz 我可以从普通文本文件或html中提取数据,但我不知道如何从gz中提取xml并从xml中提取元数据和数据... 我过去两天搜索了Google。

我是否需要在tika中使用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 个答案:

答案 0 :(得分:1)

您缺少的是在ParseContext上设置递归解析器。你可能想要这样的东西:

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

通过在ParseContext上设置Parser,告诉Tika在遇到嵌入式文档(例如GZip中的XML)时调用它

答案 1 :(得分:0)

以下是如何使用Apache Tika的XML解析器来处理您的情况:

onIdChange : function (e){
          this.setState({inputValue:e.target.value})
            console.log(e.target.value)
    },