我有以下XML源代码。
<a>
<b>
first
</b>
second
</a>
我尝试用python解析它以获取文本并将整个文本组合成一个字符串,如firstsecond
。为此,我有以下脚本
import xml.etree.ElementTree as ET
top = ET.fromstring(myXml)
for a in top.iter('a'):
s = ''
if a.text:
s += a.text
else:
for b in a.iter('b'):
if b.text:
s += b.text
print s
但脚本只打印第一个元素first
。第二个似乎迷路了。当<a></a>
中的两个字符串或<b></b>
中的两个字符串都有效时,它会起作用。
<a>
firstsecond
</a>
打印firstsecond
<a>
<b>
first
</b>
<b>
second
</b>
</a>
打印firstsecond
我错过了第二个字符串的内容,当它与<a></a>
位于同一个<b></b>
时?或者这是不可能的etree和我必须重新包装它?给出了XML,因此我无法更改源代码。
感谢您的帮助。
答案 0 :(得分:3)
b.tail
将包含second
。结束标记之后的文本在ElementTree中被视为tail
。实际上它也会包含空格,更像是\n second\n
。
考虑格式良好的XML数据块:
<a>
<b>first</b>
<b>second</b>
</a>
在这里,您将获得b.text
中的数据字段和tail
中的空白格式,这很容易被忽略。
答案 1 :(得分:0)
我找到了一种使用freq
函数简化它的方法。
tostring
此功能只包含元素和子元素的所有文本
答案 2 :(得分:0)
这个怎么样,我在你的xml文件上测试过它:
import xml.etree.ElementTree as ET
x = 'xml.xml' # your xml file
tree = ET.parse(x)
root = tree.getroot()
string = ""
for c in root:
string += c.text.strip()
print string
输出:
firstsecond