我正在尝试使用 Python 中的“lxml”模块解析 XML 文件。 我的 xml 是:
<?xml version="1.0"?>
<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<GEOMdata>
<numEL>2</numEL>
<EL>
<isEMPTY>true</isEMPTY>
<SECdata>
<SEC>
<Z>10.00</Z>
<A>20.00</A>
<P>30.00</P>
</SEC>
<SEC>
<Z>40.00</Z>
<A>50.00</A>
<P>60.00</P>
</SEC>
</SECdata>
</EL>
<EL>
<isEMPTY>false</isEMPTY>
<SECdata>
<SEC>
<Z>15.00</Z>
<A>25.00</A>
<P>35.00</P>
</SEC>
<SEC>
<Z>45.00</Z>
<A>55.00</A>
<P>65.00</P>
</SEC>
</SECdata>
</EL>
</GEOMdata>
</root>
我想为每个报告 isEMPTY 值的“EL”编写一个文本文件以及 Z、A、P 值的列表。尽管有 I/O,但我不明白如何访问该文件。 目前我编写了该代码:
from lxml import etree
parser = etree.XMLParser(encoding='UTF-8')
tree = etree.parse("TEST.xml", parser=parser)
for ELtest in tree.xpath('/root/GEOMdata/EL'):
print (ELtest.findtext('isEMPTY'))
输出正确:
true
false
现在我不知道如何访问 ELtest“内部”的子元素 Z、A、P。
感谢您的热心帮助。
编辑: 所需的输出是这样的格式化文件:
1
true
# Z A P #
10 20 30
40 50 60
2
false
# Z A P #
15 25 35
45 55 65
最佳答案
你可以使用类似的东西:
from lxml import etree
parser = etree.XMLParser(encoding='UTF-8')
tree = etree.parse("_etree.xml", parser=parser)
with open("output.txt", "w", encoding="utf8") as f:
e = tree.findall('GEOMdata/EL')
for i in e:
isEMPTY = i.find('isEMPTY')
SECdata = i.findall('SECdata')
f.write(isEMPTY.text+"\n")
for y in SECdata:
z = y.find("SEC/Z").text
a = y.find("SEC/A").text
p = y.find("SEC/P").text
f.write("{} {} {}\n\n".format(z,a, p))
<小时/>
输出.txt:
true
10.00 20.00 30.00
false
15.00 25.00 35.00
关于python - 如何在Python中使用lxml访问XML中同名的嵌套子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53655563/