gpt4 book ai didi

Python XML 从子树中搜索值

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:08 24 4
gpt4 key购买 nike

我现在正在进行修改,所以如果我想搜索 999 并打印整个 blub:Log

我会通过使用找到 999findLogIter = tree.find("999") 但我如何告诉他打印整个内容呢?

<blub:LogEvents>
<blub:Log>
<blub:LogTime>09/03/2017 01:02:16.3216</blub:LogTime>
<blub:LogIter>999</blub:LogIter>
<blub:PlugInName>blub:System</blub:PlugInName>
<blub:EventNumber>100</blub:EventNumber>
<blub:EventName>I processed something</blub:EventName>
<blub:EventClass>Process</blub:EventClass>
<blub:LogMessage><![test message]]></blub:LogMessage>
</blub:Log>
</blub:LogEvents>

输出应该是这样的:

09/03/2017 01:02:16.3216,999,blub:System,100,I processed something,Process

最佳答案

对于 LogEvents 中的每个日志,查找 LogIter,如果该子元素具有“999”文本,则为该日志调用 getItemStr()。如果“999”子元素不存在,则将附加“无”列表。因此,请使用 None 过滤结果列表。

from xml.etree import ElementTree
tree = ElementTree.parse('sample.xml')
root = tree.getroot()

def getItemStr(item):
return ','.join([sub_item.text for sub_item in item])

print filter(None,[[getItemStr(item) for child in item.findall('blub:LogIter',{"blub":"Uri"}) if child.text=="999"] for item in root ])

如果最后一行抛出错误,你甚至可以使用

print filter(None,[[getItemStr(item) for child in item.findall('blub:LogIter') if child.text=="999"] for item in root ])

在 python 2.6 及更早版本中,您必须显式注册命名空间

print filter(None,[[getItemStr(item) for child in item.findall('{Uri}LogIter') if child.text=="999"] for item in root ])

输出:

[['09/03/2017 01:02:16.3216,999,blub:System,100,I processed something,Process,hello']]

xmlns:blub="Uri" 之类的命名空间添加到您的 xml 中!

<blub:LogEvents xmlns:blub="Uri">
<blub:Log>
<blub:LogTime>09/03/2017 01:02:16.3216</blub:LogTime>
<blub:LogIter>999</blub:LogIter>
<blub:PlugInName>blub:System</blub:PlugInName>
<blub:EventNumber>100</blub:EventNumber>
<blub:EventName>I processed something</blub:EventName>
<blub:EventClass>Process</blub:EventClass>
<blub:LogMessage>hello</blub:LogMessage>
</blub:Log>
<blub:Log>
<blub:LogTime>09/03/2011 01:02:16.3216</blub:LogTime>
<blub:LogIter>1000</blub:LogIter>
<blub:PlugInName>blub:System</blub:PlugInName>
<blub:EventNumber>100</blub:EventNumber>
<blub:EventName>I processed something</blub:EventName>
<blub:EventClass>Process</blub:EventClass>
<blub:LogMessage>hi</blub:LogMessage>
</blub:Log>
</blub:LogEvents>

希望对你有帮助!

关于Python XML 从子树中搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42748056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com