MailContentHandler的源代码包含:
try {
BodyContentHandler bch = new BodyContentHandler(handler);
parser.parse(is, new EmbeddedContentHandler(bch), submd, context);
我想在此处将正文内容作为字符串读取,并根据需要添加一些元数据,如果找到/匹配/生成...我似乎无法在BodyContentHandler对象上调用toString。
如果有人熟悉tika,并创建或修改现有的解析,请指出我正确的方向。
答案 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();