管道两个萨克斯解析器?

时间:2011-11-14 08:20:40

标签: xml sax canonicalization

我有以下实施任务,我不知道如何解决它。

我们有一个基于SAX的语法检查器,用于检查某些结束endElement()中的hashsum的xml格式。此 hashsum 是使用一种过滤InputStream 构建的,它在读取内容时更新MessageDigest。 SAX-syntaxchecker使用此输入流作为其InputSource。

问题(我的任务)是,hashsum应该建在输入xml的一些规范化部分上(参见http://www.w3.org/TR/xml-c14n)。

现在很棘手:我们有一个 Canonicalizer也使用SAX 来规范化输入。 (需要注意区分属性和节点等的当前上下文,这就是我们使用SAX的原因)

我想重用那个Canonicalizer,但是我觉得如何将这两个SAX解析器结合起来。

我想我想要某种流水线操作:

InputFile - > Canonicalizer - > HashCalculation-InputStream - > SyntaxChecker。

任何想法/参考如何实现? TIA。

1 个答案:

答案 0 :(得分:0)

由于哈希计算从输入流中读取,因此规范化的结果最终必须呈现为输入流。您可以使用连接到PipedOutputStream的PipedInputStream,或临时字节数组上的一对ByteArrayOutputStream / ByteArrayInputStream。

相反,如果两个组件的设计都考虑了管道衬里,那么您可以使用org.xml.sax.XmlFilter将规范化器中的事件与哈希计算/语法检查器的处理程序连接起来