【问题标题】:Java. Sax parser. How to manually break parsing? [duplicate]爪哇。萨克斯解析器。如何手动中断解析? [复制]
【发布时间】:2011-02-27 04:53:34
【问题描述】:

请告诉我是否可以打破解析过程? IE。退出此循环未到达文档末尾和相应事件“endDocument”?

【问题讨论】:

标签: java sax


【解决方案1】:

简单的解决方案是使用 StAX 解析 - 而不是 SAX。 SAX 具有推送解析 - 事件由解析器发送到处理程序,StAX 是拉解析,事件通过 XMLEventReader 提供给我们,可以类似于迭代器使用。因此,更容易实现条件中断来突破解析。

【讨论】:

    【解决方案2】:

    在处理程序中抛出异常并在您开始解析的代码块中捕获它:

    try {
        ...
        xmlReader.parse();
    } catch (SAXException e) {
        if (e.Cause instanceof BreakParsingException) {
            // we have broken the parsing process
            ....
        }
    }
    

    在你的 DocumentHandler 中:

    public void startElement(String namespaceURI,
                         String localName,
                         String qName,
                         Attributes atts)
                  throws SAXException {
        // ...
        throw new SAXException(new BreakParsingException());
    }
    

    【讨论】:

    • 顺便说一句:2 年后我开始认为我们不得不使用异常来控制流程是非常不幸的。打破解析过程在非错误情况下是完全有效的......如果有人找到更好的解决方案,我很乐意阅读!
    • 抛出SAXParseException 的子类,您将在ErrorHandler 中获得回调。
    【解决方案3】:

    你必须抛出一个 SAXException。为了将它与常规错误区分开来,我将使用我自己的异常类对其进行子类化

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      相关资源
      最近更新 更多