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

How to collect text nodes at same element level?

下面是示例 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>

这个有用吗?

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

这可能会有所帮助。

演示:

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