BodyContentHandler是一个装饰 ContentHandler,详见javadocs。它所做的只是过滤掉 SAX 事件,以便下游处理程序只获取正文内容。但是,如果您在没有任何参数的情况下创建它,它将在内部WriteOutContentHandler
为您创建一个 100k 限制。
要获取主体本身,您需要询问您传递给的任何处理程序BodyContentHandler
来获取它。如果您只想要纯文本,并且不会达到默认字符限制,请选择以下内容:
BodyContentHandler bch = new BodyContentHandler();
parser.parse(is, bch, metadata, new ParseContext());
String plainText = bch.toString();
如果你想获得 body 的 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();