python - 如何在Python中使用lxml访问XML中同名的嵌套子级

标签 python python-3.x lxml

我正在尝试使用 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/

相关文章:

python - 如何从位于数组顶部的多边形内的 NumPy 二维数组中提取值?

python - 在 python 中处理文件路径

python - 为什么在使用 lxml(在 python 中)处理 XHTML 文档时 xpath 不起作用?

python - 获取使用 lxml 设置的单选按钮值的最佳方法是什么?

python - Django 上传和处理没有数据保留的文件

python - 使用 zipfile 在 python 中执行 mysql 查询

python - Pandas 合并两个数据框,一个包含另一个数据框的列值

python - 在 python 中解析 HTML - lxml 或 BeautifulSoup?其中哪一个更适合什么样的目的?

python - PySpark 通过 Dataproc + SSL 连接到 Cloud SQL

python - 为什么填充词汇的困惑对于 nltk.lm bigram 来说是不定式?