Python XML 解析器无法获取所有文本

标签 python xml elementtree

我有以下 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/

相关文章:

python - 使用 ID 列表进行过滤时,如何从 Django 查询中获取有限的结果?

c - Onvif - 试图了解它是如何工作的

c# - 使用 C# XML Serializer 生成自定义 XML 格式

Android drawable selector state pressed is true 按钮必须改变背景颜色

python - XML:回溯父元素

Python 类(class)是我弄错了还是我的老师弄错了 [easy]

java - 如何在 Tomcat 中为 Java EE 应用程序实现套接字

python - 如何修复 'django.db.utils.OperationalError: near "无“: syntax error' db. sqlite3?

xml - Pyspark:hdfs 中没有这样的文件或目录

python - ElementTree XML 解析和 urllib2.urlopen