Python 关闭所有打开的xml标记

Python 关闭所有打开的xml标记,python,xml,Python,Xml,我有一个文件,可以在短时间内更改它的内容。但我想在它准备好之前读一读。问题是,它是一个xml文件(日志)。所以当你阅读它时,可能不是所有的标签都被关闭了 我想知道是否有可能正确关闭所有打开的标记,在浏览器中显示它(使用xslt样式表)是否没有问题。这应该通过使用python的附带功能来实现。您可以通过向任何SAX解析器提供迄今为止可用的数据来使用它。使用仅重建源XML的SAX处理程序,保持标记堆栈打开,并在结束时按相反顺序关闭它们。一些XML解析器允许增量解析XML文档,这样解析器就可以开始处理

我有一个文件,可以在短时间内更改它的内容。但我想在它准备好之前读一读。问题是,它是一个xml文件(日志)。所以当你阅读它时,可能不是所有的标签都被关闭了


我想知道是否有可能正确关闭所有打开的标记,在浏览器中显示它(使用xslt样式表)是否没有问题。这应该通过使用python的附带功能来实现。

您可以通过向任何SAX解析器提供迄今为止可用的数据来使用它。使用仅重建源XML的SAX处理程序,保持标记堆栈打开,并在结束时按相反顺序关闭它们。

一些XML解析器允许增量解析XML文档,这样解析器就可以开始处理文档而无需完全加载。Python标准库中xml.etree.ElementTree模块中的XMLTreeBuilder就是这样一个解析器:

正如您在下面的示例中所看到的,您可以在从输入源读取数据时,将数据逐位提供给解析器。当发生各种XML“事件”(标记开始、标记数据读取、标记结束)时,将调用处理程序类中相应的钩子方法,从而允许您在加载XML文档时处理数据:

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()
从xml.etree.ElementTree导入XMLTreeBuilder
类MyHandler(对象):
def启动(自身、标签、属性):
#为每个开始标记调用。
打印标记+“已启动”
def端(自身,标签):
#为每个结束标记调用。
打印标记+“结束”
def数据(自身、数据):
#从标记读取数据时调用
打印数据+“数据读取”
def关闭(自我):
#在分析所有数据后调用。
打印“所有数据读取”
handler=MyHandler()
解析器=XMLTreeBuilder(目标=handler)
parser.feed()
parser.feed(文本)
parser.feed()
parser.feed()
parser.close()
在此示例中,处理程序将接收五个事件并打印:

一些标签开始了

sometag子项已启动

“文本”数据读取

sometag孩子结束了

一些标签结束了


所有数据均已读取

如果我正确理解了您的问题,您会得到一个日志文件,该文件总是被附加到日志文件中,因此您会得到如下结果:

<root>
<entry> ... </entry>
<entry> ... </entry>
...
<entry> ... </entry
<!-- no closing root -->

... 
... 
...

... 您可以使用BeautifulStoneSoup(BeautifulSoup的XML部分)

www.crumy.com/software/BeautifulSoup

这并不理想,但如果无法修复文件的输出,则可以避免此问题

它基本上是Denis所说的之前实现的版本

你可以在汤里加入你需要的任何东西,汤会尽力把它弄好的