python - 如何收集同一元素级别的文本节点?

标签 python xml elementtree

下面是示例 xml。 我正在研究 xml.etree.ElementTree 模块而不是 lxml。

<data>
    <AAA>
        <CCC>
            <BBB>This</BBB>
        </CCC>
        <CCC>  
            <BBB>is</BBB>
        </CCC>
        <CCC>
            <BBB>test1</BBB>
        </CCC>
    </AAA>

    <AAA>
        <CCC>
            <BBB>This is test</BBB>
        </CCC>
    </AAA>

   <AAA>
        <CCC>
            <BBB>222222</BBB>
        </CCC>
        <CCC>
            <BBB>333333</BBB>
        </CCC>      
    </AAA>  

    <AAA>
        <BBB>
            <CCC>This is test</CCC>
        </BBB>
    </AAA>
</data>

我正在尝试收集 AAA 元素下 CCC 下 BBB 的所有文本。 但我不知道为什么它不起作用。启动时没有错误,但未收集文本。 我想知道为什么这段代码不能很好地工作。

BBB_collect = ''.join(BBB.itertext())

请检查下面

import xml.etree.ElementTree as ET
import re

f1 = open ("C:\\test\\Data.xml","r",encoding="utf=8")
f2 = open ("C:\\test\\output.xml","wt",encoding="utf=8")
doc = ET.parse("C:\\test\\Data.xml")
root = doc.getroot()
a = 0

try:
    while True :
        AAA = root.findall('AAA')[a]
        for CCC in AAA.findall('CCC'):
            for BBB in CCC.findall('BBB'):
                BBB_collect = ''.join(BBB.itertext())
                print(BBB_collect)
        print('===============')
        a = a+1
except IndexError :
    pass

你能给我一些建议吗?这是怎么回事?

最终,这是我的目标。

<data>
    <AAA>
        <CCC>
            <BBB>Thisistest1</BBB>
        </CCC>
    </AAA>

    <AAA>
        <CCC>
            <BBB>This is test</BBB>
        </CCC>
    </AAA>

    <AAA>
        <CCC>
            <BBB>222222333333</BBB>
        </CCC>
    </AAA>  

    <AAA>
        <BBB>
            <CCC>This is test</CCC>
        </BBB>
    </AAA>
</data>

最佳答案

这可能会有所帮助。

演示:

import xml.etree.ElementTree as ET
doc = ET.fromstring(data)   

for AAA in doc.findall('AAA'):
    bText = ""
    for CCC in AAA.findall('CCC'):
        for BBB in CCC.findall('BBB'):
            bText += BBB.text
    print(bText)

输出:

Thisistest1
This is test
222222333333
This is test

关于python - 如何收集同一元素级别的文本节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50463394/

相关文章:

python - 如何暂停在终端中运行的python脚本

python - Pandas 有没有办法在 dataframe.apply 中使用先前的行值,其中先前的值也在 apply 中计算?

python - 比较包含 nan 的 pandas 系列是否相等?

xml - 我使用什么标签将版权声明添加到 xml 文件?

javascript - 如何在 XML 中插入多个/不同的隐藏字段?

python - 使用python在XML中不同元素具有相同名称时复制属性信息

python - 使用正则表达式功能突出显示多个单词

c# - C# 中的 XML 解析问题

python - 使用 python 解析 *.nfo 文件

python - 将 Python ElementTree 写入文件会抛出 TypeError