У меня действительно странная проблема с lxml, я пытаюсь проанализировать мой xml-файл с помощью iterparse следующим образом:
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', то он проверяет, получил ли он потомок, если да записывает свое значение в файл
В файле есть ОДИН , который, кажется, не существует , возвращая None при выполнении elem.find ('seg'), вы можете увидеть его здесь, и вы увидите его в контексте ниже <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>