我使用python解析.xml这个文件很复杂,因为它有很多嵌套的子节点;访问其中包含的一些值是非常烦人的,因为代码开始变得非常糟糕。如何在python中分析带有多个嵌套子元素的.xml文件?
让我先为您呈现的.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<Start>
<step1 stepA="5" stepB="6" />
<step2>
<GOAL1>11111</GOAL1>
<stepB>
<stepBB>
<stepBBB stepBBB1="pinco">1</stepBBB>
</stepBB>
<stepBC>
<stepBCA>
<GOAL2>22222</GOAL2>
</stepBCA>
</stepBC>
<stepBD>-NO WOMAN NO CRY
-I SHOT THE SHERIF
-WHO LET THE DOGS OUT
</stepBD>
</stepB>
</step2>
<step3>
<GOAL3 GOAL3_NAME="GIOVANNI" GOAL3_ID="GIO">
<stepB stepB1="12" stepB2="13" />
<stepC>XXX</stepC>
<stepC>
<stepCC>
<stepCC GOAL4="saf12">33333</stepCC>
</stepCC>
</stepC>
</GOAL3>
</step3>
<step3>
<GOAL3 GOAL3_NAME="ANDREA" GOAL3_ID="DRW">
<stepB stepB1="14" stepB2="15" />
<stepC>YYY</stepC>
<stepC>
<stepCC>
<stepCC GOAL4="fwe34">44444</stepCC>
</stepCC>
</stepC>
</GOAL3>
</step3>
</Start>
我的目标将是访问包含在那么更好的方式同我在写一个名为“GOAL”的孩子内的值我的示例代码如下。此外,我想找到一种自动方式来查找具有相同类型标签的GOALS的值,该标签属于具有相同名称的不同儿童:
例如:GIOVANNI和ANDREA都使用相同类型的标签(GOAL3_NAME
)虽然属于不同的同名儿童(<step3>
)。
这里是我写的代码:我得到的是
import xml.etree.ElementTree as ET
data = ET.parse('test.xml').getroot()
GOAL1 = data.getchildren()[1].getchildren()[0].text
print(GOAL1)
GOAL2 = data.getchildren()[1].getchildren()[1].getchildren()[1].getchildren()[0].getchildren()[0].text
print(GOAL2)
GOAL3 = data.getchildren()[2].getchildren()[0].text
print(GOAL3)
GOAL4_A = data.getchildren()[2].getchildren()[0].getchildren()[2].getchildren()[0].getchildren()[0].text
print(GOAL4_A)
GOAL4_B = data.getchildren()[3].getchildren()[0].getchildren()[2].getchildren()[0].getchildren()[0].text
print(GOAL4_B)
和输出如下:
11111
22222
33333
44444
,我想应该是这样的输出:
11111
22222
GIOVANNI
33333
ANDREA
44444
正如您所看到的,我可以轻松读取GOAL1
和GOAL2
我正在寻找更好的代码实践来访问这些值,因为它在我看来太长而且难以阅读/理解。
我想要做的第二件事是以自动化的方式获得GOAL3
和GOAL4
,这样我就不必重复类似的代码行,并使其更易于理解。
注意:您可以看到我无法读取GOAL3
。如果可能的话,我想同时获得GOAL3_NAME
和GOAL3_ID
为了使.xml文件结构更加理解我的后是什么样子的图像:
高亮元素我在找什么。
所需要的信息,我说得对不对,你希望从标签为“GOAL”+ str(N)的元素获得文本,其中N是数字?来自GOAL1,GOAL2,GOAL4的 –
我需要得到他们存储的数字:11111,22222,33333,444444.至于GOAL3,我想要GIOVANNI和ANDREA。 –
我建议您在data.iter()中使用“for d” –