Apache tika,在MailContextHandler中读取已解析的正文

时间:2013-04-11 13:34:07

标签: java apache-tika

MailContentHandler的源代码包含:

try {
            BodyContentHandler bch = new BodyContentHandler(handler);
            parser.parse(is, new EmbeddedContentHandler(bch), submd, context);

我想在此处将正文内容作为字符串读取,并根据需要添加一些元数据,如果找到/匹配/生成...我似乎无法在BodyContentHandler对象上调用toString。

如果有人熟悉tika,并创建或修改现有的解析,请指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

BodyContentHandler是一个装饰ContentHandler,详见javadocs。它只是过滤掉SAX事件,以便下游处理程序只获取正文内容。但是,如果您创建without any arguments,则会在内部为您创建WriteOutContentHandler,限制为100k。

要获取身体本身,您需要询问传递给BodyContentHandler的任何处理程序以获取它。如果您只想要纯文本,并且不会达到默认字符限制,请执行以下操作:

BodyContentHandler bch = new BodyContentHandler();
parser.parse(is, bch, metadata, new ParseContext());
String plainText = bch.toString();

如果你想获得身体的XHTML,你会想要更像的东西:

StringWriter sw = new StringWriter();
SAXTransformerFactory factory = (SAXTransformerFactory)
             SAXTransformerFactory.newInstance();
TransformerHandler handler = factory.newTransformerHandler();
handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "xml");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "no");
handler.setResult(new StreamResult(sw));

BodyContentHandler bch = new BodyContentHandler(handler);

parser.parse(is, bch, metadata, new ParseContext());

String xhtml = sw.toString();