如何使用xml.etree解析外部实体,如lxml.etree

tow*_*owi 5 python xml lxml elementtree xml-entities

我有一个脚本,使用lxml.etree以下方法解析XML :

from lxml import etree

parser = etree.XMLParser(load_dtd=True, resolve_entities=True)
tree = etree.parse('main.xml', parser=parser)
Run Code Online (Sandbox Code Playgroud)

我需要load_dtd=Trueresolve_entities=True可以具有&emptyEntry;globals.xml解决:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE map SYSTEM "globals.xml" [
    <!ENTITY dirData "${DATADIR}"> 
]>
<map 
    xmlns:map="http://my.dummy.org/map"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsschemaLocation="http://my.dummy.org/map main.xsd"
>

  &emptyEntry; <!-- from globals.xml -->

  <entry><key>KEY</key><value>VALUE</value></entry>
  <entry><key>KEY</key><value>VALUE</value></entry>
</map>
Run Code Online (Sandbox Code Playgroud)

globals.xml

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY emptyEntry "<entry></entry>">
Run Code Online (Sandbox Code Playgroud)

现在我想从非标准lxml转向标准xml.etree.但这与我的文件失败,因为load_dtd=True并且resolve_entities=True不受支持xml.etree.

是否有xml.etree解决这些实体的问题?

ale*_*cxe 0

lxml 是完成这项工作的正确工具。

但是,如果您想使用 stdlib,那么请做好迎接困难的准备,并查看 XMLParser 的 UseForeignDTD 方法。这是一个很好的(但很hacky)示例:Python ElementTree support for parsing Unknown XMLEntity?