2016-07-18 1 views
-1

Мой код довольно прост;Cryptic error in lxml при открытии файла

f = open(r"C:\filepath\file.xml") 
xml = f.read() 
tree = etree.parse(xml) 

При запуске этого я получаю трассировку стека

tree = etree.parse(xml) 
    File "src/lxml/lxml.etree.pyx", line 3427, in lxml.etree.parse (src\lxml\lxml.etree.c:79801) 
    File "src/lxml/parser.pxi", line 1782, in lxml.etree._parseDocument (src\lxml\lxml.etree.c:115995) 
    File "src/lxml/parser.pxi", line 1808, in lxml.etree._parseDocumentFromURL (src\lxml\lxml.etree.c:116345) 
    File "src/lxml/parser.pxi", line 1712, in lxml.etree._parseDocFromFile (src\lxml\lxml.etree.c:115233) 
    File "src/lxml/parser.pxi", line 1115, in lxml.etree._BaseParser._parseDocFromFile (src\lxml\lxml.etree.c:109930) 
    File "src/lxml/parser.pxi", line 573, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:103404) 
    File "src/lxml/parser.pxi", line 683, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:105058) 
    File "src/lxml/parser.pxi", line 611, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:103924) 
IOError 

Что здесь происходит?

ответ

1

parse() принимает путь к файлу XML:

tree = etree.parse(r"C:\filepath\file.xml") 

В настоящее время код передает текущее содержимое XML в parse(), что вызовет такой IOError. Вместо этого вы можете использовать fromstring(), чтобы создать объект Element из строки, содержащей фактические данные XML. И при необходимости вы можете создать объект ElementTree из ранее созданного Element:

f = open(r"C:\filepath\file.xml") 
xml = f.read() 
root = etree.fromstring(xml) 
tree = etree.ElementTree(root)