Я использую lxml для анализа XML-файла в python. В одном из файлов есть поле, содержащее символ «ACK». Все последующие поля не могут быть извлечены. Как я могу пропустить это поле, если оно содержит нестандартные символы, такие как «ACK», и продолжить извлечение остальных полей?
<layer1>
<layer2>
<layer3>
<content><![CDATA[free-string ^F]]></content>
<field1>10</field1>
<field2>hello</field2>
</layer3>
</layer2>
</layer1>
Что у меня есть (ETA, чтобы показать больше кода):
import lxml.etree as ET
try:
try:
coding = 'utf-8'
parsing = ET.XMLParser(encoding=coding, recover=True)
tree = ET.parser(file, parser=parser)
except:
try:
coding = 'cp874'
parsing = ET.XMLParser(encoding=coding, recover=True)
tree = ET.parser(file, parser=parser)
except:
try:
coding = 'cp1252'
parsing = ET.XMLParser(encoding=coding, recover=True)
tree = ET.parser(file, parser=parser)
except:
coding = 'iso-8859-1'
parsing = ET.XMLParser(encoding=coding, recover=True)
tree = ET.parser(file, parser=parser)
node = tree.find('.//layer1/layer2/layer3/content')
if node is not None and node.text is not None:
content = node.text
field1_node = tree.find('.//layer1/layer2/layer3/field1')
field1 = field1_node.text
field2_node = tree.find('.//layer1/layer2/layer3/field2')
field2 = field2_node.text
except:
print "Cannot parse file"
Когда извлечение для content не удалось, извлечение для field1 и field2 также не удалось (хотя все поля до content могут быть успешно извлечены.
Как мне обращаться с таким content?
Я добавил в свой пост часть, где я пробовал разные кодировки и вариант recover.
ET.parser должен быть ET.parse, верно? Пожалуйста, убедитесь, что код в вопросе работает. В любом случае, я думаю, что проблема должна быть решена путем удаления/замены оскорбительного символа перед попыткой синтаксического анализа. Ваши входные данные имеют неправильный формат, и совместимый синтаксический анализатор XML правильно отклоняет их. Пробовать разные кодировки не помогает. Опция recover=True иногда может помочь, когда вход неисправен, но не все исправит.






Символ Юникода U+0006 (ПОДТВЕРЖДЕНИЕ) не допускается в документах XML 1.0. Как вам удается разбирать файл? Вы используете опцию
recoverlxml? Пожалуйста, покажите ваш полный код.