Вот простой XML-файл:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<someThing>
Text A: This is a test line.
<p>Some paragraph.</p>
Text B: This is another test line.
<p>Some other paragraph.</p>
Text C: And even another test line.
</someThing>
</root>
Хотя тестовый XML-файл очень мал, реальный файл, который я хотел бы обработать, довольно велик: несколько гигабайт.Поэтому я хотел бы проанализировать этот файл, используя iterparse (), используя следующий код Python.
import xml.etree.ElementTree as etree
FILE_NAME = "test.xml"
for event, element in etree.iterparse(FILE_NAME, events=("start", "end", "start-ns", "end-ns")):
print(event, "\t", element, "\t", repr(element.text))
Если я запустил это, я получу следующий вывод:
start <Element 'root' at 0x7fd96a6aa728> '\n\t'
start <Element 'someThing' at 0x7fd968fba688> '\n\t\tText A: This is a test line.\n\t\t'
start <Element 'p' at 0x7fd968fcaf48> 'Some paragraph.'
end <Element 'p' at 0x7fd968fcaf48> 'Some paragraph.'
start <Element 'p' at 0x7fd968fcaf98> 'Some other paragraph.'
end <Element 'p' at 0x7fd968fcaf98> 'Some other paragraph.'
end <Element 'someThing' at 0x7fd968fba688> '\n\t\tText A: This is a test line.\n\t\t'
end <Element 'root' at 0x7fd96a6aa728> '\n\t'
Как вы можете видетьтекстовые элементы после <p>
-элементов игнорируются.
Мой вопрос: как мне использовать API LXML для правильной обработки содержимого этого файла?Все примеры, которые я мог найти до сих пор по этой теме, не делают ничего, кроме моего короткого фрагмента кода, и поэтому страдают от той же проблемы.Если это невозможно сделать с помощью LXML, кто-нибудь знает другой разборщик XML, который я мог бы использовать, и приведу краткий пример?