lxml XMLSyntaxError: префикс по умолчанию для пространства имен не найден

Я использую lxml для чтения моего xml-файла. Я использую код, как показано ниже. Он отлично работает с lxml2.3 beta1, но с lxml2.3 он дает мне синтаксическую ошибку zn xml, как показано ниже. Я просмотрел заметки о выпуске для обеих версий, но не мог понять, что могло вызвать эту ошибку или как ее исправить. Пожалуйста, помогите, если вы столкнулись с такой вещью или имеете какие-либо сведения об этом.

Благодаря!!

  • Возможно ли, чтобы lxml работал нечувствительным к регистру образом?
  • XPath: выберите тег с пустым значением
  • parsing xml, содержащий пространство имен по умолчанию, чтобы получить значение элемента, используя lxml
  • как удалить элемент в lxml
  • Установка lxml для Python 3.4 в Windows x 86 (32 бит) с помощью Visual Studio C ++ 2010 Express
  • Разбор большого XML с lxml
  • Код:

    from lxml import etree def parseXml(context,attribList,elemList): for event, element in context: if element.tag in elemList: #read element attributes element.clear() def main(object): ns='{NS}' attribList=['name','age','id'] elemList=[ns+'Employee',ns+'Experience',ns+'Employment',ns+'Project',ns+'Award'] context=etree.iterparse(fullFilePath, events=("start","end")) parseXml(context,attribList,elemList) 

    Ошибка:

    Файл «iterparse.pxi», строка 478, в файле lxml.etree.iterparse. next (src / lxml / lxml.etree.c: 95348) Файл «iterparse.pxi», строка 530, в файле lxml.etree.iterparse._read_more_events (src / lxml / lxml.etree.c: 95886) Файл «parser.pxi» ", строка 585, в файле lxml.etree._raiseParseError (src / lxml / lxml.etree.c: 71955) XMLSyntaxError: префикс по умолчанию для пространства имен не найден, строка 545, столбец 73

    xml sample –

     <root xmlns='NS'> <Employee Name="Mr.ZZ" Age="30"> <Experience TotalYears="10" StartDate="2000-01-01" EndDate="2010-12-12"> <Employment id = "1" EndTime="ABC" StartDate="2000-01-01" EndDate="2002-12-12"> <Project Name="ABC_1" Team="4"> </Project> </Employment> <Employment id = "2" EndTime="XYZ" StartDate="2003-01-01" EndDate="2010-12-12"> <PromotionStatus>Manager</PromotionStatus> <Project Name="XYZ_1" Team="7"> <Award>Star Team Member</Award> </Project> </Employment> </Experience> </Employee> </root> 

    «Сотрудник» повторяется внутри корня. И ошибка возникает после того, как парсер прошел, хотя многие из сотрудников правильно.

    Редактирование 1: При захвате исключения я поймаю следующее:

     WARNING:NAMESPACE:NS_ERR_UNDEFINED_NAMESPACE: Namespace default prefix was not found 

  • Несколько операторов, найденных при компиляции одного оператора
  • Эффективно проверяет, является ли произвольный объект NaN в Python / numpy / pandas?
  • TypeError: объект 'generator' не подлежит расшифровке, csv-файл
  • Удалить NaN из серии pandas
  • Добавление поля в структурированный массив numpy
  • Как использовать многопроцессор Python Pool.map для заполнения массива numpy в цикле for
  • 2 Solutions collect form web for “lxml XMLSyntaxError: префикс по умолчанию для пространства имен не найден”

    Хорошо, поэтому я, наконец, понял, что происходит. Следуя рекомендациям по очистке использованных элементов, я очищал все элементы, включая корневой узел. Корневой узел – это тот, у которого есть префикс пространства имен по умолчанию, который применяется ко всем узлам внутри этого корня. Поскольку я очистил свой корневой узел, префикс пространства имен по умолчанию больше не был частью nsmap его подэлементов. Предыдущие версии, похоже, прощают это, но последняя версия была более строгой в этом смысле.

    Не очистка корневого элемента до тех пор, пока я не закончил читать xml, сделал трюк для меня.

    проблемы с пространством имен по умолчанию чаще всего возникают при попытке выражения xpath. Для просто синтаксического анализа потока, как в вашем примере, 2.3.0 должен работать нормально с неназванным пространством имен по умолчанию.

    Возможно, вам следует опубликовать минимально возможный XML-файл, который дает эту ошибку (строка 545 довольно глубоко в файл, чтобы иметь эту ошибку)

    Python - лучший язык программирования в мире.