2015-03-19 7 views
1

У меня есть огромный XML-файл 800 мб, то есть DBLP набор данные, но когда я запускаю мой код, я получаю следующие ошибки: -разбор результатов документа XML разбор ошибок

Я делаю следующие операции мой код: -

1.Parse input file by lxml module 
2.Get Title name from the User by raw_input() 
3.Target article tag who title start with User input in step2. 
4.Iterate every article tags from the step 3 
5.Create List of list tuple which save all articles tag and its text information in th result. 
6.Print result. 

Мой код: - полученный

import lxml.etree as ET 
root = ET.parse('input.xml') 

title = raw_input('enter the name: ') 
articles = root.xpath('.//article[starts-with(title, "%s")]' % title) 
result = [] 
for article in articles: 
    tmp = [] 
    for i in article.getchildren(): 
     tmp.append((i.tag, i.text)) 

    result.append(tmp) 

#- Print result: 
for i in result: 
    print "\n" 
    for j in i: 
     print "%s:%s"%(j[0], j[1]) 

Ошибки: -

Traceback (most recent call last): 
    File "C:/Python27/xmp2.py", line 2, in <module> 
    root = ET.parse('myxml.xml') 
    File "lxml.etree.pyx", line 3301, in lxml.etree.parse (src\lxml\lxml.etree.c:72453) 
    File "parser.pxi", line 1791, in lxml.etree._parseDocument (src\lxml\lxml.etree.c:105915) 
    File "parser.pxi", line 1817, in lxml.etree._parseDocumentFromURL (src\lxml\lxml.etree.c:106214) 
    File "parser.pxi", line 1721, in lxml.etree._parseDocFromFile (src\lxml\lxml.etree.c:105213) 
    File "parser.pxi", line 1122, in lxml.etree._BaseParser._parseDocFromFile (src\lxml\lxml.etree.c:100163) 
    File "parser.pxi", line 580, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:94286) 
    File "parser.pxi", line 690, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:95722) 
    File "parser.pxi", line 620, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:94789) 
XMLSyntaxError: Entity 'ouml' not defined, line 47, column 25 

Мой XML выглядит следующим образом: -

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE dblp SYSTEM "dblp.dtd"> 
<dblp> 
<article mdate="2011-01-11" key="journals/acta/Saxena96"> 
<author>Sanjeev Saxena</author> 
<title>Parallel Integer Sorting and Simulation Amongst CRCW Models.</title> 
<pages>607-619</pages> 
<year>1996</year> 
<volume>33</volume> 
<journal>Acta Inf.</journal> 
<number>7</number> 
<url>db/journals/acta/acta33.html#Saxena96</url> 
<ee>http://dx.doi.org/10.1007/BF03036466</ee> 
</article> 

Пожалуйста, помогите мне решить мою проблему! Спасибо заранее.

ответ

1

Проблемы, вероятно, исходят от ссылочного «dblp.dtd».

«Цель ОТД состоит в определении структуры документа XML», который может иметь объект, определенный как <!ENTITY ouml...>

Check this, чтобы решить вашу проблему.

3

Сообщение об ошибке

Entity «ouml» не определено, строка 47, столбец 25

означает, что в этой позиции в документе, появляется ссылка сущности &ouml;, для которых не было найдено никакого определения , (Вероятно, он предназначен для представления o-with-umlaut, но в отличие от HTML, такие имена объектов не встроены в XML, они должны быть определены в DTD.)

Возможно, это не только появление такой ссылки на сущность в вашем основном исходном документе.

В документе содержится ссылка на DTD dblp.dtd. Есть две возможности: либо объект не определен в DTD, либо почему-то ваш парсер не подбирает его. Я думаю, что dplp - это хорошо известный и широко используемый набор данных (созданный людьми, которые технически очень компетентны), поэтому я думаю, что первое объяснение маловероятно, если не произошла некорректная препроцессия, которая искажала данные. Вторая вероятность кажется более вероятной. На данный момент я больше не могу помочь, потому что я ничего не знаю о парсере Python, который вы используете, или о его настройках конфигурации.

+1

Просто добавьте некоторую информацию: для некоторых странных исторических причин dblp.xml использует локальное объявление SYSTEM файла dblp.dtd. Следовательно, необходимо загрузить DTD-файл вместе с XML-файлом. В зависимости от используемого анализатора dblp.dtd необходимо скопировать в каталог, содержащий dblp.xml, или текущий рабочий каталог скрипта (или оба, чтобы быть уверенным). В качестве альтернативы можно, конечно, также просто отредактировать объявление DOCTYPE загруженного dblp.xml, чтобы использовать общедоступный DTD-файл по адресу http://dblp.uni-trier.de/xml/dblp.dtd. – MRA

Смежные вопросы