from xml.etree.ElementTree import XMLTreeBuilder
class MyHandler(object):
def start(self, tag, attrib):
# Called for each opening tag.
print tag + " started"
def end(self, tag):
# Called for each closing tag.
print tag + " ended"
def data(self, data):
# Called when data is read from a tag
print data + " data read"
def close(self):
# Called when all data has been parsed.
print "All data read"
handler = MyHandler()
parser = XMLTreeBuilder(target=handler)
parser.feed(<sometag>)
parser.feed(<sometag-child-tag>text)
parser.feed(</sometag-child-tag>)
parser.feed(</sometag>)
parser.close()
如果我正确地理解了您的问题,那么您有一个日志文件,它总是被附加在后面,因此您会得到如下内容:
在这种情况下,您不希望使用DOM解析器,因为它试图读取完整的文档,并且会被丢失的标记阻塞。相反,SAX或Pull解析器可以工作,因为它像数据流一样读取文档,而不是完整的树。正如丹尼斯在上面回答的,您可以在结尾处关闭丢失的标记,也可以在写出之前忽略任何不完整的标记。在
XML parsing on Wikipedia
在不需要XML文档解析的情况下,可以对一些XML文档进行完全的解析。中的XMLTreeBuilderxml.etree.ElementTreePython标准库中的模块就是这样一个解析器:Element Tree
正如您在下面的示例中看到的,您可以在从输入源读取数据时将数据一点一点地提供给解析器。当发生各种XML“事件”(标记开始、标记数据读取、标记结束)发生时,将调用处理程序类中相应的钩子方法,允许您在加载XML文档时处理数据:
在本例中,处理程序将接收五个事件并打印:
sometag开始了
sometag child开始
“文本”数据读取
sometag孩子结束了
sometag结束
所有数据读取
您可以通过向任何SAX解析器提供目前可用的数据来使用它。使用SAX处理程序,它只重建源XML,使标记堆栈保持打开状态,并在最后以相反的顺序关闭它们。在
相关问题 更多 >
编程相关推荐