当我使用 python ElementTree 时,解析带有 ü 等特殊字符的 xml 文件失败Schnelle Multiplikation von Polynomen über Körpern der </desc> <question vote="1"> <p>xml文件:</p> <pre><code><?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE dblp SYSTEM "dblp.dtd"> <dblp> <title>Schnelle Multiplikation von Polynomen &uuml;ber K&ouml;rpern der Charakteristik 2.</title> </dblp> </code></pre> <p>我用 python 如下传递这个文件,我还有一个 .dtd 文件:</p> <pre><code>import xml.etree.ElementTree as ET tree=ET.parse(r"../data/test_dblp.xml") root=tree.getroot() for i in range(0,9): print root[0][i].text </code></pre> <p>报错:</p> <blockquote> <p>xml.etree.ElementTree.ParseError: undefined entity 'ü';</p> </blockquote> </question> <answer tick="false" vote="1"> <p>使用本网站另一篇文章的解决方案解决:</p> <pre><code>from xml.etree.ElementTree import iterparse, XMLParser import htmlentitydefs class CustomEntity: def __getitem__(self, key): if key == 'umml': key = 'uuml' # Fix invalid entity return unichr(htmlentitydefs.name2codepoint[key]) parser = XMLParser() parser.parser.UseForeignDTD(True) parser.entity = CustomEntity() for (event, node) in iterparse('dblp.xml', events=['start'], parser=parser): print node.tag node.clear() </code></pre> </answer> <answer tick="false" vote="0"> <p>uuml 看起来像一个标准的 html5 实体。在运行 xml 解析器之前将它们转换为它们的 unicode 字符可能会有所帮助。在 python3.4+ 中,您可以为此使用<pre><code>html.unescape</code></pre>。</p> <pre><code>from html import escape, unescape textXML = re.sub("\\&\\w+\\;", lambda x: escape(unescape(x.group(0))), text) </code></pre> </answer> </body></html>

问题描述 投票:0回答:0
python xml dtd
© www.soinside.com 2019 - 2024. All rights reserved.