Python XML 解析器未获取所有文本
Python XML parser doesn't get all text
我有以下 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
当第二个字符串与 <b></b>
在同一个 <a></a>
时,我是不是漏掉了一些东西?或者这对 etree 来说是不可能的,我必须重新包装它吗? XML 已给出,因此我无法更改来源。
感谢您的帮助。
b.tail
将在您的第一个示例中包含 second
。结束标记后的文本在 ElementTree 中被视为 tail
。实际上它也会包含空格并且更像 \n second\n
.
考虑一个格式良好的数据块 XML:
<a>
<b>first</b>
<b>second</b>
</a>
此处您将获得 b.text
中的数据字段和 tail
中的空白格式,这些很容易被忽略。
我找到了一种使用 tostring
函数简化它的方法。
top = ET.fromstring(myXml)
for a in top.iter('a'):
s = ET.tostring(a, method='text')
print s
这个函数只是合并元素和子元素的所有文本
这个怎么样,我在你的 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
我有以下 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
当第二个字符串与 <b></b>
在同一个 <a></a>
时,我是不是漏掉了一些东西?或者这对 etree 来说是不可能的,我必须重新包装它吗? XML 已给出,因此我无法更改来源。
感谢您的帮助。
b.tail
将在您的第一个示例中包含 second
。结束标记后的文本在 ElementTree 中被视为 tail
。实际上它也会包含空格并且更像 \n second\n
.
考虑一个格式良好的数据块 XML:
<a>
<b>first</b>
<b>second</b>
</a>
此处您将获得 b.text
中的数据字段和 tail
中的空白格式,这些很容易被忽略。
我找到了一种使用 tostring
函数简化它的方法。
top = ET.fromstring(myXml)
for a in top.iter('a'):
s = ET.tostring(a, method='text')
print s
这个函数只是合并元素和子元素的所有文本
这个怎么样,我在你的 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