【问题标题】:End parsing xml early in sax在 sax 中尽早结束解析 xml
【发布时间】:2020-08-10 07:15:21
【问题描述】:

当我使用 xml.sax 解析 xml 文件时,我想随时停止解析器或直到程序满足某些条件。请不要退出或抛出异常,因为我希望程序继续运行。

正如“endElement”中所述,我如何提前完成解析并打印例如sax_parse 中的“你好”?

class myHandler(sax.ContentHandler):
    def __init__(self):
        super().__init__()
        self.count = 0
        
    def startElement(self, name, attrs):
        if name == 'row':
            self.count += 1

    def endElement(self, name):
        if self.count > 10000:
            # stop the parser
            pass

def sax_parse():
    parser = sax.make_parser()
    parser.setFeature(sax.handler.feature_namespaces, 0)
    handler = myHandler()
    parser.setContentHandler(handler)
    parser.parse("url")
    print('hello')

【问题讨论】:

  • 我可以使用多处理并引发异常来实现这个目标吗?

标签: python xml sax


【解决方案1】:

下面的代码应该适合你。

这个想法是引发一个特定的异常,捕捉它并忽略它..

class HaveEnoughRows(Exception):
    pass

class myHandler(sax.ContentHandler):
    def __init__(self):
        super().__init__()
        self.count = 0
        
    def startElement(self, name, attrs):
        if name == 'row':
            self.count += 1

    def endElement(self, name):
        if self.count > 10000:
            # stop the parser
            raise HaveEnoughRows()

def sax_parse():
    parser = sax.make_parser()
    parser.setFeature(sax.handler.feature_namespaces, 0)
    handler = myHandler()
    parser.setContentHandler(handler)
    try:
        parser.parse("url")
    except HaveEnoughRows:
        pass
    print('hello')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2012-04-28
    • 2011-04-16
    • 2011-05-31
    相关资源
    最近更新 更多