xml - 如何在 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>")
解决方案
可能无法解析包含混合在一起的随机文本片段和 XML 的文件。文本部分很可能包含类似 XML 但格式不正确的内容(如<\?xml[^>]+\?>
);在一般情况下,不可能将其与 XML 区分开来。
推荐阅读
- node.js - 通过某些条件检索 mongodb 文档
- linux-kernel - open-file-description 表不像 Tanenbaum 在 Ubuntu 中描述的那样?
- python - 在 Python 的同一个类中从一个方法调用列表到另一个方法
- java - 使用时区偏移值解析 ZonedDateTime 字符串
- java - 如何组织一个java布局?
- html - 在 Tailwind CSS 中制作动画标签?
- c++ - 在 aarch64/arm64 上将浮点数转换为 int
- java - 已安装 OpenJDK 15 但 $JAVA_HOME 仍指向 oracle JDK 11
- python - 有效地将第一个限定符读入集合
- java - 如何访问由另一个应用程序创建/在共享存储中擦除数据之前创建的文件 - Android 11