如何使用&符号读取xml文件

MER*_*ose 2 python parsing lxml

这是我的xml档案:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE papers>
<papers>
  <paper>
    <title>Title containing & and more</title>
  </paper>
</papers>
Run Code Online (Sandbox Code Playgroud)

我怎么用lxml's 读etree?我试过了

from lxml import etree

with open(xml_file, 'r') as inf:
    tree = etree.parse(inf)
Run Code Online (Sandbox Code Playgroud)

但它导致以下Traceback:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "lxml.etree.pyx", line 3239, in lxml.etree.parse (src/lxml/lxml.etree.c:69955)
  File "parser.pxi", line 1769, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:102257)
  File "parser.pxi", line 1789, in lxml.etree._parseFilelikeDocument (src/lxml/lxml.etree.c:102516)
  File "parser.pxi", line 1684, in lxml.etree._parseDocFromFilelike (src/lxml/lxml.etree.c:101442)
  File "parser.pxi", line 1134, in lxml.etree._BaseParser._parseDocFromFilelike (src/lxml/lxml.etree.c:97069)
  File "parser.pxi", line 582, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:91275)
  File "parser.pxi", line 683, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:92461)
  File "parser.pxi", line 622, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:91757)
lxml.etree.XMLSyntaxError: xmlParseEntityRef: no name, line 5, column 30
Run Code Online (Sandbox Code Playgroud)

Jar*_*uen 6

如果需要保留&字符,可以将文件解析为HTML.

from lxml import html
tree = html.parse(path)
Run Code Online (Sandbox Code Playgroud)

如果您没有需要的&字符,你可以创建一个新的XML解析器并通过recover=True选项.

from lxml import etree
parser = etree.XMLParser(recover=True)
tree = etree.parse(path, parser=parser)
Run Code Online (Sandbox Code Playgroud)