为什么 cElementTree iterparse return None 元素?
Why does cElementTree iterparse return None elements?
我正在尝试用 cElementTree.iterparse 解析 xml 文件。
但是,我不明白发生了什么,因为 iterparse returns 空元素。
我有一个 xml 文件,其大致布局如下:
<DOCS>
<ID id="1">
<HEAD>title1</HEAD>
<DATE>21.01.2010</DATE>
<TEXT>
<P>some text</P>
<P>some text</P>
<P>some text</P>
</TEXT>
</ID>
<ID id="2">
<HEAD>title2</HEAD>
<DATE>21.01.2010</DATE>
<TEXT>
some text
</TEXT>
</ID>
</DATA>
我正在尝试从 TEXT
标签中提取文本或遍历 TEXT
标签子项(P
标签)并从中提取文本。
这是我的代码:
import xml.etree.cElementTree as cet
docs = {}
id = ''
for event, elem in cet.iterparse(xml_data, events=('end',)):
if elem.tag == 'ID':
id = elem.attrib['id']
if elem.tag == 'TEXT':
if list(elem):
docs[id] = ''.join([p.text for p in elem])
else:
docs[id] = elem.text
#print(docs)
return docs
当我执行我的代码时,我得到:
docs[id] = ''.join([p.text for p in elem])
TypeError: sequence item 14: expected str instance, NoneType found
这意味着列表理解[p.text for p in elem]
中的p
之一是None
。好吧,我用print语句知道哪个是前面的p
文本,看看是不是xml文件标签有问题。好吧,实际上没有任何文本的 p
元素应该有它,因为它在 xml 文件中有一个文本主体。有人能解释一下这是怎么回事吗?
忘记 if event == 'end':
检查的愚蠢错误。
所以,只有当 event == 'end'
我们有一个完全填充的 elem
对象时,才会发生这种情况。
我正在尝试用 cElementTree.iterparse 解析 xml 文件。 但是,我不明白发生了什么,因为 iterparse returns 空元素。 我有一个 xml 文件,其大致布局如下:
<DOCS>
<ID id="1">
<HEAD>title1</HEAD>
<DATE>21.01.2010</DATE>
<TEXT>
<P>some text</P>
<P>some text</P>
<P>some text</P>
</TEXT>
</ID>
<ID id="2">
<HEAD>title2</HEAD>
<DATE>21.01.2010</DATE>
<TEXT>
some text
</TEXT>
</ID>
</DATA>
我正在尝试从 TEXT
标签中提取文本或遍历 TEXT
标签子项(P
标签)并从中提取文本。
这是我的代码:
import xml.etree.cElementTree as cet
docs = {}
id = ''
for event, elem in cet.iterparse(xml_data, events=('end',)):
if elem.tag == 'ID':
id = elem.attrib['id']
if elem.tag == 'TEXT':
if list(elem):
docs[id] = ''.join([p.text for p in elem])
else:
docs[id] = elem.text
#print(docs)
return docs
当我执行我的代码时,我得到:
docs[id] = ''.join([p.text for p in elem])
TypeError: sequence item 14: expected str instance, NoneType found
这意味着列表理解[p.text for p in elem]
中的p
之一是None
。好吧,我用print语句知道哪个是前面的p
文本,看看是不是xml文件标签有问题。好吧,实际上没有任何文本的 p
元素应该有它,因为它在 xml 文件中有一个文本主体。有人能解释一下这是怎么回事吗?
忘记 if event == 'end':
检查的愚蠢错误。
所以,只有当 event == 'end'
我们有一个完全填充的 elem
对象时,才会发生这种情况。