gpt4 book ai didi

python - ElementTree 查找返回 'None' ?

转载 作者:行者123 更新时间:2023-12-04 10:22:25 30 4
gpt4 key购买 nike

我在 Python 中使用 ElementTree 来解析 XML 文件。

这是我试图解析的 XML 文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<objects fpmi.archive.type="components" framework.version="7.9.8.2018060714" fpmi.version="9.9.8.0" timestamp="Thu Sep 27 15:00:19 CEST 2018">
<arraylist len="0"/>
<c cls="com.inductiveautomation.factorypmi.application.components.template.TemplateHolder">
<c-comm>
<p2df>26.0;14.0</p2df>
<r2dd>10.0;10.0;26.0;14.0</r2dd>
<str>X123_C61023</str>
<lc>10.0;10.0;16;0;0.7058824;1.3333334</lc>
</c-comm>
<c-c m="setParameterValues" s="1;java.util.Map">
<o cls="java.util.HashMap">
<o-c m="put" s="2;O;O">
<str>tagPath</str>
<str>X123_X123_C61023</str>
</o-c>
</o>
</c-c>
<c-c m="setTemplatePath" s="1;str">
<str>[network]premium/aw1/tags/monitors</str>
</c-c>
</c>

控制台总是返回 None 。

我的代码:
import xml.etree.ElementTree as ET

mytree = ET.parse('sample.xml')
myroot = mytree.getroot()

for x in myroot.findall('c'):
p2df=x.find('p2df')
r2dd=x.find('r2dd')
print(p2df, r2dd)

请帮忙..

最佳答案

Element.findall()只搜索带有标记的元素,这些元素是当前元素的直接子元素。同样的情况也发生在 find()但是 find()返回第一个匹配项。所以首先你需要遍历到c-comm , 找到 p2df元素,从 objects是根节点,你先遍历到c ,然后 c-comm然后找到对象。见下面的片段。

import xml.etree.ElementTree as ET

mytree = ET.parse('sample.xml')
myroot = mytree.getroot()

cNode = myroot.find('c')
for x in cNode.findall('c-comm'):
p2df=x.find('p2df')
r2dd=x.find('r2dd')
print(p2df.text, r2dd.text)

您的示例 xml 格式不正确。您需要关闭 </objects>标记在最后,以便解析器能够读取文件。

关于python - ElementTree 查找返回 'None' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60791069/

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