我对SAX有一个相对普遍的问题。我明白它是如何工作的,并且基于我读过的教程,我学习了通过让大量数据成员像inNode那样是布尔值,然后在每个事件处理器中检查每个布尔值并相应地处理参数。SAX代码效率
对我来说,这看起来效率很低,有没有更高效的方法,还是只是SAX的本质?
谢谢, 克里斯
我对SAX有一个相对普遍的问题。我明白它是如何工作的,并且基于我读过的教程,我学习了通过让大量数据成员像inNode那样是布尔值,然后在每个事件处理器中检查每个布尔值并相应地处理参数。SAX代码效率
对我来说,这看起来效率很低,有没有更高效的方法,还是只是SAX的本质?
谢谢, 克里斯
通常,您可以通过使用一堆简单的标签来保持状态。
当您输入节点时,您按下。
当你离开一个节点时,你会弹出。
有时这比许多布尔人更好。而是检查堆栈以查看是否存在正确的上下文以保留要解析的数据。
啊,这真的很有创意。我认为这会使代码更加清洁,尽管你可能仍然需要一堆if/else块吗?除非你真的有创意,并且有一些处理器体系结构存储在一个散列表中,并将键作为节点名称...... – 2009-08-26 00:50:06
很少你有一堆if/else块。通常,您正在执行与当前上下文类似XPath的匹配,以查看是否要保留它。由于上下文是一个堆栈(Python中的列表),所以比较是微不足道的。在其他语言中,将堆栈与模板模式进行比较可能有点困难,但它比其他任何其他语言更正则表达式或XPath匹配。 – 2009-08-26 14:36:54
它总是比一堆布尔人更好 - 实际上,我发现无法想象如果没有一堆堆栈,就可以使用SAX。 – 2009-08-26 18:12:26
这是SAX如何工作。它专为低内存使用率和更简单的处理而设计。如果你的代码变得太复杂了,你可能需要使用DOM模型。
不够公平,谢谢! – 2009-08-25 19:31:39
另一种比DOM或SAX更高效的选择是VTD-XML – 2011-01-25 05:36:26
请尝试http://code.google.com/p/jlibs/wiki/SAX2JavaBinding – 2010-01-23 07:00:09