我对 lxml 有一个非常奇怪的问题,我尝试使用 iterparse 解析我的 xml 文件,如下所示:
for event, elem in etree.iterparse(input_file, events=('start', 'end')):
if elem.tag == 'tuv' and event == 'start':
if elem.get('{http://www.w3.org/XML/1998/namespace}lang') == 'en':
if elem.find('seg') is not None:
write_in_some_file
elif elem.get('{http://www.w3.org/XML/1998/namespace}lang') == 'de':
if elem.find('seg') is not None:
write_in_some_file
它非常简单并且工作得几乎完美,很快它就会通过我的 xml 文件,如果它是一个元素,它会检查语言属性是“en”还是“de”,然后它会检查是否有一个孩子,如果是,它会写它的值到文件中
文件中有一个 <seg> 似乎不存在,在执行 elem.find('seg') 时返回 None,您可以在此处看到它,并在下面的上下文中找到它<seg>! keine Spalten und Ventile</seg>
。
我不明白为什么这个看起来很好的标签会产生问题(因为我不能使用它的 .text),请注意其他所有标签都很好
<tu tuid="235084307" datatype="Text">
<prop type="score">1.67647</prop>
<prop type="score-zipporah">0.6683</prop>
<prop type="score-bicleaner">0.7813</prop>
<prop type="lengthRatio">0.740740740741</prop>
<tuv xml:lang="en">
<prop type="source-document">http://www.beviclean.de/en/shop/product-details/artikel/bevi-accessoires/34/7969ccc9b6/bevi-clean-ball.html</prop>
<prop type="source-document">http://www.beviclean.de/en/shop/product-details/artikel/bevi-accessoires/34//bevi-clean-ball.html</prop>
<seg>! no gaps and valves</seg>
</tuv>
<tuv xml:lang="de">
<prop type="source-document">http://www.beviclean.de/en/shop/product-details/artikel/bevi-accessoires/34/7969ccc9b6/bevi-clean-ball.html</prop>
<prop type="source-document">http://www.beviclean.de/en/shop/product-details/artikel/bevi-accessoires/34//bevi-clean-ball.html</prop>
<seg>! keine Spalten und Ventile</seg>
</tuv>
</tu>