如何使用Apache Tika过滤特定的html标记

时间:2016-10-21 09:38:09

标签: html xpath html-parsing apache-tika

我正在使用 Apache Tika 来解析互联网上的几个网页。我的目标是过滤<article>代码之间的所有内容。

到目前为止,我有以下代码设置:

        XPathParser xhtmlParser = new XPathParser("xhtml", XHTMLContentHandler.XHTML);
        Matcher contentMatcher = xhtmlParser.parse("//xhtml:article");
        ContentHandler handler = new MatchingContentHandler(
                new ToXMLContentHandler(), contentMatcher);
        ParseContext parseContext = new ParseContext();            
        Parser parser = new HtmlParser();
        Metadata metadata = new Metadata();

        try (InputStream stream = url.openStream()) {
            System.out.println("Start parsing...");
            parser.parse(stream, handler, metadata, parseContext);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (TikaException e) {
            e.printStackTrace();
        }

        System.out.println(handler.toString());

首先,我不确定XPath表达式"//xhtml:article"是否正确,因为我在控制台中没有输出任何输出。

其次,我在the example pages of Tika上阅读:

  

可以对解析结果执行XPath查询以进行提取   只有XHTML的某些位。

所以我不确定我这样做是否可能。但如果没有,过滤这些内容的正确选择是什么?

我希望有人可以帮我解决这个问题,

提前致谢。

修改

当我继续努力让事情发挥作用时,我想我想出了什么。 Tika使用解析器读取文档并将其解析为XHTML序列。事实是,这个序列似乎不会输出<article>标签,而只是忽略它们。接下来,"//article"上的Xpath查询将在此生成的XHTML上发布,因此无法在文档中找到任何<article>标记。

这是对的吗?或者我完全错了? 如果这是正确的解释,那么实现目标目标的另一种方式是什么?

0 个答案:

没有答案