Ошибка с функцией fromstring от l xml python - PullRequest
0 голосов
/ 12 марта 2020

Попытка сделать

import lxml.etree

xml_str = """
<root>
<H4>

</H4>
<P>
Hong Kong, February 06, 2020 -- </P>
<P>
&bull; Testing data only
</P>
</root>
"""

utf8_parser = lxml.etree.XMLParser(encoding='utf-8')
metadata_xml = lxml.etree.fromstring("""<root>""" + xml_str + """</root>""",
                                     parser=utf8_parser)

Я получаю сообщение об ошибке:

 File "src\lxml\etree.pyx", line 3236, in lxml.etree.fromstring
  File "src\lxml\parser.pxi", line 1876, in lxml.etree._parseMemoryDocument
  File "src\lxml\parser.pxi", line 1757, in lxml.etree._parseDoc
  File "src\lxml\parser.pxi", line 1068, in lxml.etree._BaseParser._parseUnicodeDoc
  File "src\lxml\parser.pxi", line 601, in lxml.etree._ParserContext._handleParseResultDoc
  File "src\lxml\parser.pxi", line 711, in lxml.etree._handleParseResult
  File "src\lxml\parser.pxi", line 640, in lxml.etree._raiseParseError
  File "<string>", line 9
lxml.etree.XMLSyntaxError: Entity 'bull' not defined, line 9, column 7

Кто-нибудь знает, как я могу обойти это?

1 Ответ

0 голосов
/ 12 марта 2020

Как прокомментировал Джорданм, используйте синтаксический анализатор HTML вместо синтаксического анализатора XML.

import lxml.etree

xml_str = r"""
<root>
<H4>

</H4>
<P>
Hong Kong, February 06, 2020 -- </P>
<P>
&bull; Testing data only
</P>
</root>
"""

html_parser = lxml.etree.HTMLParser()

metadata_xml = lxml.etree.fromstring("""<root>""" + xml_str + """</root>""", 
                                     parser=html_parser)

Если вы настаиваете на использовании синтаксического анализатора XML, вы можете удалить символьную сущность &bull;. ссылка так:

import html

xml_str = html.unescape(xml_str)
...