2009-08-25 77 views
1

我对SAX有一个相对普遍的问题。我明白它是如何工作的,并且基于我读过的教程,我学习了通过让大量数据成员像inNode那样是布尔值,然后在每个事件处理器中检查每个布尔值并相应地处理参数。SAX代码效率

对我来说,这看起来效率很低,有没有更高效的方法,还是只是SAX的本质?

谢谢, 克里斯

+0

请尝试http://code.google.com/p/jlibs/wiki/SAX2JavaBinding – 2010-01-23 07:00:09

回答

2

通常,您可以通过使用一堆简单的标签来保持状态。

当您输入节点时,您按下。

当你离开一个节点时,你会弹出。

有时这比许多布尔人更好。而是检查堆栈以查看是否存在正确的上下文以保留要解析的数据。

+0

啊,这真的很有创意。我认为这会使代码更加清洁,尽管你可能仍然需要一堆if/else块吗?除非你真的有创意,并且有一些处理器体系结构存储在一个散列表中,并将键作为节点名称...... – 2009-08-26 00:50:06

+0

很少你有一堆if/else块。通常,您正在执行与当前上下文类似XPath的匹配,以查看是否要保留它。由于上下文是一个堆栈(Python中的列表),所以比较是微不足道的。在其他语言中,将堆栈与模板模式进行比较可能有点困难,但它比其他任何其他语言更正则表达式或XPath匹配。 – 2009-08-26 14:36:54

+0

它总是比一堆布尔人更好 - 实际上,我发现无法想象如果没有一堆堆栈,就可以使用SAX。 – 2009-08-26 18:12:26

0

这是SAX如何工作。它专为低内存使用率和更简单的处理而设计。如果你的代码变得太复杂了,你可能需要使用DOM模型。

+0

不够公平,谢谢! – 2009-08-25 19:31:39

+0

另一种比DOM或SAX更高效的选择是VTD-XML – 2011-01-25 05:36:26