Как передать XML-файл в LXML для анализа? - PullRequest
12 голосов
/ 06 июня 2010

Я пытаюсь разобрать файл xml, используя lxml. xml.etree позволил мне просто передать имя файла в качестве параметра функции parse, поэтому я попытался сделать то же самое с lxml.

Мой код:

from lxml import etree
from lxml import objectify

file = "C:\Projects\python\cb.xml"
tree = etree.parse(file)

но я получаю ошибку:

Traceback (most recent call last):
  File "cb.py", line 5, in <module>
    tree = etree.parse(file)
  File "lxml.etree.pyx", line 2698, in lxml.etree.parse (src/lxml/lxml.etree.c:4
9590)
  File "parser.pxi", line 1491, in lxml.etree._parseDocument (src/lxml/lxml.etre
e.c:71205)
  File "parser.pxi", line 1520, in lxml.etree._parseDocumentFromURL (src/lxml/lx
ml.etree.c:71488)
  File "parser.pxi", line 1420, in lxml.etree._parseDocFromFile (src/lxml/lxml.e
tree.c:70583)
  File "parser.pxi", line 975, in lxml.etree._BaseParser._parseDocFromFile (src/
lxml/lxml.etree.c:67736)
  File "parser.pxi", line 539, in lxml.etree._ParserContext._handleParseResultDo
c (src/lxml/lxml.etree.c:63820)
  File "parser.pxi", line 625, in lxml.etree._handleParseResult (src/lxml/lxml.e
tree.c:64741)
  File "parser.pxi", line 565, in lxml.etree._raiseParseError (src/lxml/lxml.etr
ee.c:64084)
lxml.etree.XMLSyntaxError: AttValue: " or ' expected, line 2, column 26

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

Ответы [ 4 ]

1 голос
/ 07 июня 2010

Что вы делаете неправильно: (1) не проверяете, получили ли вы тот же результат, используя xml.etree в том же файле (2) не читаете сообщение об ошибке, которое указывает на синтаксическую ошибку в строке 2 файла, путь вниз из любого вопроса открытия файла

1 голос
/ 03 января 2012

Этим утром я наткнулся на подобное сообщение об ошибке, и для меня ответом было неправильное DTD. В моем DTD было определение атрибута со значением по умолчанию, которое не было заключено в кавычки - как только я изменил это, ошибка больше не возникала.

0 голосов
/ 07 ноября 2014

lxml позволяет загрузить поврежденный xml, создав экземпляр синтаксического анализатора с restore = True

etree.XMLParser(recover=True)

Хотя это не идеально, я использую это для загрузки xml для проверки схемы / dtd / schematron.

0 голосов
/ 06 июня 2010

В вашей разметке XML есть синтаксическая ошибка. Вы не делаете ничего плохого.

...