我有以下 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 已给出,因此我无法更改源。
感谢您的帮助。
最佳答案
b.tail
将在第一个示例中包含 second
。结束标记之后的文本在 ElementTree 中被视为 tail
。实际上它也会包含空格,并且更像 \n secondary\n
。
考虑一个格式良好的 XML 数据 block :
<a>
<b>first</b>
<b>second</b>
</a>
在这里,您将在 b.text
中获得数据字段,并在 tail
中获得空白格式,这些很容易被忽略。
关于Python XML 解析器无法获取所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37212274/