Удаление маркера спецификации в начале файла XML - PullRequest
1 голос
/ 14 апреля 2020

У меня есть файл XML, из которого я пытаюсь удалить спецификацию, так как мне нужно проанализировать ее с помощью l xml. Ссылку на файл можно найти здесь . Некоторый упрощенный код для этого был бы:

from lxml import etree

f = open(filename, "r")
ff = f.read()
fff = ff.encode('utf-8-sig')
ffff = fff.decode('utf-8')

tree = etree.fromstring(ffff)

Я попытался следовать некоторым из приведенных здесь примеров для работы с такого рода экземпляром, однако я все еще получаю ту же ошибку, с которой начал:

lxml.etree.XMLSyntaxError: Start tag expected, '<' not found, line 1, column 1

Что я сделал не так?

Спасибо

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Ваш текущий код выполняет кодирование и декодирование в обратном направлении, в результате получая удвоенную спецификацию вместо нуля вообще. Вы хотите кодировать с помощью обычного utf-8 и декодировать с помощью utf-8-sig.

Но вы можете избежать всего этого, выполнив декодирование прямо из файла. Попробуйте:

f = open(filename, "r", encoding="utf-8-sig")
ff = f.read()

tree = etree.fromstring(ff)
0 голосов
/ 14 апреля 2020

Насколько я могу судить, это сейчас работает:

f = open(nfile, "r", encoding="utf-8-sig")
ff = f.read()
fff = ff.encode("utf-8")


tree = etree.fromstring(fff)
...