使用 SAX 解析流后,将 XML 内容记录到文件中以供审核

Log the XML content to a file for audit purpose after parsing stream with SAX

提问人:ironwood 提问时间:5/31/2022 最后编辑:Nikos Paraskevopoulosironwood 更新时间:5/31/2022 访问量:88

问:

我正在通过使用 SAX 解析器读取 XML 内容。
我想在解析流后将 XML 内容记录到文件中以进行审核(在解析时和解析之前也可以)。

但是由于性能原因,我想将内容作为流来阅读
我尝试克隆输入流和进程,但没有工作。任何线索将不胜感激。
InputStream

法典:

    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?
Java XML 解析 SAX

评论

0赞 Nikos Paraskevopoulos 5/31/2022
我要做的是将其包装成透明地将输入复制到输出的东西中。Apache commons IO 正是这样做的,所以请考虑一下!(参考文献)。您将不得不处理 einput 中出现错误并且过早停止解析的情况 - 您可能需要读取 EOF 才能完成写入。responseStreamTeeInputStream

答:

0赞 Michael Kay 5/31/2022 #1

您可以编写一个 SAX,它复制每个事件,将其发送到两个不同的 s,一个是您当前的 s,另一个是将事件流序列化为 .ContentHandlerContentHandlerTransformerHandlerStreamResult