我正在使用SAX解析器通过InputStream
读取XML内容。
我想在解析流后将 XML 内容记录到文件中以进行审计(同时和解析之前也可以)。
但是由于性能原因,我想将内容作为流阅读。
我尝试克隆输入流和进程,但不起作用。任何线索将不胜感激。
法典:
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
////////////////////////////////
SAXParserFactory parserFactor = SAXParserFactory.newInstance();
SAXParser parser = parserFactor.newSAXParser();
SAXHandler handler = new SAXHandler(); // SAXHandler extends DefaultHandler
XMLReader xmlReader = parser.getXMLReader();
xmlReader.setErrorHandler(new CustomErrorHandlerSax(System.err)); // CustomErrorHandlerSax implements ErrorHandler
xmlReader.setContentHandler(handler);
xmlReader.parse(new InputSource(responseStream)); // responseStream is an InputStream
// how to log the content that was on the responseStream?
您可以编写一个 SAXContentHandler
,该复制每个事件,将其发送到两个不同的ContentHandler
,一个是当前事件,另一个是将事件流序列化为StreamResult
的 JAXPTransformerHandler
。