【问题标题】:SAX Premature End to a Parse?SAX 过早结束解析?
【发布时间】:2009-05-22 13:08:08
【问题描述】:

我对使用 XML 比较陌生,并且正在使用 javax.xml.parsers.SAXParser 处理一些相当大的文档。

问题是:我需要的信息位于 XML 文件的顶部附近,我不需要 来解析整个文档。 -- 识别出相关信息后,停止解析文件的“最佳”方法是什么?

(目前我能想到的唯一方法就是抛出异常。)

【问题讨论】:

    标签: java xml sax


    【解决方案1】:

    抛出异常是阻止它的唯一方法。示例见this IBM XML tip

    您可能应该实现自己的异常来表示打算停止进一步处理。这样,您将能够区分有意停止处理和无意停止(遇到一些意外情况等时)

    【讨论】:

      【解决方案2】:

      您可以使用 StAX。它实际上随时停止解析过程而不会抛出任何异常。

      退房:

      http://www.xml.com/pub/a/2003/09/17/stax.html

      http://jcp.org/en/jsr/detail?id=173

      【讨论】:

      • 这是最好的方法,因为抛出异常来控制正常的执行流程并不是那么优雅(除非没有其他方法,但既然它应该避免)。 “流式拉解析 (StAX) 是指一种编程模型,其中客户端应用程序在需要与 XML 信息集交互时调用 XML 解析库上的方法。流式推送解析 (SAX) 指的是一种编程模型,其中 XML 解析器当解析器遇到 XML 中的元素时,将 XML 数据发送(推送)到客户端。” java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP2.html
      【解决方案3】:

      似乎抛出异常是解决这个问题的最好方法,就像outlined by Tom

      public class MySAXTerminatorException extends SAXException {
      ...
      }
      
      public void startElement (String namespaceUri, String localName,
                                String qualifiedName, Attributes attributes)
                              throws SAXException {
          if (someConditionOrOther) {
              throw new MySAXTerminatorException();
          }
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 2013-04-08
        相关资源
        最近更新 更多