gpt4 book ai didi

python - 查找具有 minidom 属性的元素

转载 作者:太空狗 更新时间:2023-10-29 20:11:49 28 4
gpt4 key购买 nike

给定

<field name="frame.time_delta_displayed" showname="Time delta from previous displayed frame: 0.000008000 seconds" size="0" pos="0" show="0.000008000"/>
<field name="frame.time_relative" showname="Time since reference or first frame: 0.000008000 seconds" size="0" pos="0" show="0.000008000"/>
<field name="frame.number" showname="Frame Number: 2" size="0" pos="0" show="2"/>
<field name="frame.pkt_len" showname="Packet Length: 1506 bytes" hide="yes" size="0" pos="0" show="1506"/>
<field name="frame.len" showname="Frame Length: 1506 bytes" size="0" pos="0" show="1506"/>
<field name="frame.cap_len" showname="Capture Length: 1506 bytes" size="0" pos="0" show="1506"/>
<field name="frame.marked" showname="Frame is marked: False" size="0" pos="0" show="0"/>
<field name="frame.protocols" showname="Protocols in frame: eth:ip:tcp:http:data" size="0" pos="0" show="eth:ip:tcp:http:data"/>

如何在不遍历每个标签并检查属性的情况下立即获取名称为“frame.len”的字段?

最佳答案

我认为你做不到。

来自父element , 你需要

for subelement in element.GetElementsByTagName("field"):
if subelement.hasAttribute("frame.len"):
do_something()

根据您 3 月 11 日的评论,如果您的文档结构稳定且没有令人讨厌的意外(例如属性中的尖括号),您可能想尝试一下不可思议的事情并使用正则表达式。这不是推荐的做法,但可以工作并且比实际解析文件容易得多。我承认我自己有时也这样做过。还没有失明。

所以在你的情况下你可以(假设 <field> 标签不跨越多行):

xmlfile = open("myfile.xml")
for line in xmlfile:
match = re.search(r'<field\s+name="frame.len"\s+([^>]+)/>', line):
if match:
result = match.group(1)
do_something(result)

如果 <field>标记可以跨越多行,您可以尝试将整个文件作为纯文本加载到内存中,然后扫描它以查找匹配项:

filedump = open("myfile.xml").read()
for match in re.finditer(r'<field\s+name="frame.len"\s+([^>]+)/>', filedump):
result = match.group(1)
do_something(result)

在这两种情况下,result将包含 frame.len 以外的属性.正则表达式假定 frame.len始终是标记内的第一个属性。

关于python - 查找具有 minidom 属性的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2415115/

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