我正在使用 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>
标记。
这是对的吗?或者我完全错了? 如果这是正确的解释,那么实现目标目标的另一种方式是什么?