gpt4 book ai didi

Python ElementTree - 在写得不好的 XML 中搜索 child /孙子

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:22 27 4
gpt4 key购买 nike

我正在尝试解析编码不当的 XML 并输出标签的节点名称和内容(仅当它存在时),并且仅当字符串名称=内容 > 30 天时。

到目前为止,我可以使用 ElementTree 搜索子元素,但我需要有关嵌套信息不当的帮助。我无法更改 XML,因为它是供应商提供的报告。我是一个完全的新手,所以请指导我需要做什么或提供更好的帮助。提前致谢。

示例文件:

<?xml version="1.0" encoding="UTF-8"?>
<ReportSection>
<ReportHead>
<Criteria>
<HeadStuff value=Dont Care>
</HeadStuff>
</Criteria>
</ReportHead>
<ReportBody>
<ReportSection name="UpTime" category="rule">
<ReportSection name="NodeName.domain.net" category="node">
<String name="node">NodeName.domain.net</String>
<String name="typeName">Windows Server</String>
<OID>-1y2p0ij32e8c8:-1y2p0idhghwg6</OID>
<ReportSection name="UpTime" category="element">
<ReportSection name="2015-09-20 18:50:10.0" category="version">
<String name="version">UpTime</String>
<OID>-1y2p0ij32e8cj:-1y2p0ibspofhp</OID>
<Integer name="changeType">2</Integer>
<String name="changeTypeName">Modified</String>
<Timestamp name="changeTime" displayvalue="9/20/15 6:50 PM">1442793010000</Timestamp>
<ReportSection name="versionContent" category="versionContent">
<String name="content">12 day(s), 7 hour(s), 33 minute(s), 8 second(s)</String>
<String name="content"></String>
</ReportSection>
</ReportSection>
</ReportSection>
</ReportSection>
</ReportSection>
</ReportBody>
</ReportSection>

最佳答案

想法是定位 content 节点,提取那里有多少天,然后在需要时检查值,并定位节点名称。示例(使用 lxml.etree ):

import re

from lxml import etree

pattern = re.compile(r"^(\d+) day\(s\)")

data = """your XML here"""
tree = etree.fromstring(data)

content = tree.findtext(".//String[@name='content']")
if content:
match = pattern.search(content)
if match:
days = int(match.group(1))

# TODO: check the days if needed

node = tree.findtext(".//String[@name='node']")

print node, days

打印:

NodeName.domain.net 12

关于Python ElementTree - 在写得不好的 XML 中搜索 child /孙子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32827119/

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