如何收集同一元素级别的文本节点?
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
下面是示例 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