python - 如何在同一元素级别收集文本节点?
问题描述
下面是示例 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 - 找不到 entrypoint.prod.sh 文件(Docker python buster 图像)
- java - 用于生成 AWS S3 预签名 URL 的 Java 代码
- c - 我认为我对变量感到困惑
- html - Css:检查显示应该隐藏的容器
- c++ - 如何保留 MPI 和非 MPI 版本?
- python - 使用 elementtree 根据孙子标签查找元素
- nginx - nginx重定向在位置指令内不起作用
- groovy - 如何从 Artifactory 只下载文件(没有文件夹)
- r - 如何绘制一个框(或圆圈)以强调 R 中图形的特定区域?
- python - 如何从 ViUR 中的代码将条目附加到关系骨