首页 > 解决方案 > 如何在 Python 中获取和验证日志文件中的 xml 内容?

问题描述

我需要解析一些内容类似于 XML 的日志文件,但它没有根目录,并且中间有文本内容。

日志文件格式为:

2019-09-12 15:30:02.137 (162,<ThreadPool>    ) Info          Sending:
<Keepalive />
2019-09-12 15:30:03.512 (65 ,Estate            ) DebugInfo     Incoming buffer has 292 bytes
<Outcome>
  <ItemId>373011</ItemId>
  <AreaId>232</AreaId>
  <CarrierId>131</CarrierId>
  <AResult>
    <Measured>Ok</Measured>
  </AResult>
    <TimeStamp>2019-09-12T19:30:02Z</TimeStamp>
</Outcome>

2019-09-12 15:32:02.137 (162,<ThreadPool>    ) Info          Sending:
<Keepalive />
2019-09-12 15:32:03.512 (65 ,Estate            ) DebugInfo     Incoming buffer has 292 bytes
<Outcome>
  <ItemId>373012</ItemId>
  <AreaId>232</AreaId>
  <CarrierId>131</CarrierId>
  <AResult>
    <Measured>Ok</Measured>
  </AResult>
    <TimeStamp>2019-09-12T19:32:02Z</TimeStamp>
</Outcome>

由于它是一个日志文件,我可以为此使用 ElementTree 库吗?我需要为不同的项目 ID 验证 Measured OK。

我尝试了这些,但都没有奏效:(1)

import xml.etree.ElementTree as ET
import re
with open('C:\lovely\Libraries\site.log') as f:
xml = f.read()
tree = ET.fromstring(re.sub(r"(<\?xml[^>]+\?>)", r"\1<root>", xml) + "</root>")

标签: xmllogging

解决方案


可能无法解析包含混合在一起的随机文本片段和 XML 的文件。文本部分很可能包含类似 XML 但格式不正确的内容(如<\?xml[^>]+\?>);在一般情况下,不可能将其与 XML 区分开来。


推荐阅读