我正在努力完成以下任务:
我想这样做的原因是我已经有了我的处理程序,现在我正在使用它与SAX解析器。我现在想在内存文件中使用处理程序。
请注意,这在以下方面很有用:我必须多次使用处理程序。对于大型文档,我想使用SAX,对于小型我想使用内部表示。
谢谢!
答案 0 :(得分:1)
实现此目的的最快方法(快速编码)是将要使用SAX解析的内部文档部分写入内部字符串,然后使用基于该字符串的StringReader
传递那个使用你的处理程序的SAX解析器。
您真正需要的是根据您的数据生成SAX事件并将这些事件提供给处理程序。您可以通过将数据转换为InputSource
或Reader
的形式然后在您的解析中使用它来实现,这是上面描述的策略,或者您可以通过直接调用简单地模拟SAX事件你已经写过ContentHandler
的方法。但如果您的文档非常复杂,那么按照正确的顺序调用它们并为它们提供正确的数据来完成您所需的操作可能会很痛苦。
如果Dom4J提供了一种基于文档结构中的节点创建InputSource
的方法,那么这将是最容易使用的,并且可能比首先将其写入字符串更有效。
您最好考虑将执行实际工作的ContentHandler
部分提取到一个单独的类中,您可以使用ContentHandler
和从内部树遍历的新类。