gpt4 book ai didi

python - 使用minidom python打印父标签xml的值

转载 作者:行者123 更新时间:2023-12-01 04:00:37 24 4
gpt4 key购买 nike

我有一个非常大的 xml 文件,如果某些标签超过 2,我需要知道 ID 值。xml 文件是这样的:

<Users>
<Calendar ID="text1">
<Folders>...</Folders>
<FolderRights/>
<Event/>
<EventReminder/>
<EventContact/>
<EventRecurrence/>
<EventException/>
<ContactItem>
<COLUMNS>...</COLUMNS>
<FIELDS>...</FIELDS>
<FIELDS>...</FIELDS>
<FIELDS>...</FIELDS>
<FIELDS>...</FIELDS>
</ContactItem>
<ContactLocation>...</ContactLocation>
<Tags/>
<TagLinks/>
<ItemAttr/>
<ItemAttrData/>
</Calendar>
<Calendar ID="text2">
<Folders>...</Folders>
<FolderRights/>
<Event/>
<EventReminder/>
<EventContact/>
<EventRecurrence/>
<EventException/>
<ContactItem/>
<ContactLocation/>
<Tags/>
<TagLinks/>
<ItemAttr/>
<ItemAttrData/>
</Calendar>
</Users>

如果联系人中的字段超过 2,我必须在每个日历标记的 ID 中打印文本,所以我编写以下代码:

from xml.dom.minidom import parseString
xmlFile = open('prova.xml','r')
data = xmlFile.read()
xmlFile.close()
dom = parseString(data)
for contatti in dom.getElementsByTagName('ContactItem'):
if (len(contatti.getElementsByTagName('FIELDS')) > 2):
print (contatti.getElementsByTagName('Calendar')[0].firstChild.nodeValue)

但我没有 ID 值。我怎样才能做到这一点?非常感谢

最佳答案

使用 lxml 非常简单,使用 count 查找具有 > 2 contactitem//fields 标签的日历父标签:

from lxml.html import fromstring

tree = fromstring(the_xml)

print(tree.xpath("//calendar[count(./contactitem//fields) > 2]/@id"))

示例运行:

In [8]: from lxml.html import fromstring

In [9]: tree = fromstring(h)

In [10]: tree.xpath("//calendar[count(./contactitem//fields) > 2]/@id"
....: )
Out[10]: ['text1']

或者使用lxml.etree:

from lxml.etree import fromstring

tree = fromstring(h)

print(tree.xpath("//Calendar[count(./ContactItem//FIELDS) > 2]/@ID"))

要从文件中读取,请使用解析:

from lxml.html import parse
tree = parse("your.xml")

您通常应该从文件中读取并让 lxml 处理编码。

count 在 xml.etree 中不受支持,因此要执行相同操作,您可以使用 findall:

from xml.etree import ElementTree as et

tree = et.parse("Your.xml")
cals = tree.findall(".//Calendar")
print([c.get("ID") for c in cals if len(c.findall("./ContactItem/FIELDS")) > 2])

关于python - 使用minidom python打印父标签xml的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36619011/

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