加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:29:10 所属栏目:百科 来源:网络整理
导读:我有一个使用lxml.etree解析 XML的脚本: from lxml import etreeparser = etree.XMLParser(load_dtd=True,resolve_entities=True)tree = etree.parse('main.xml',parser=parser) 我需要load_dtd = True和resolve_entities = True有 emptyEntry;从globals.xm
我有一个使用lxml.etree解析 XML的脚本:

from lxml import etree

parser = etree.XMLParser(load_dtd=True,resolve_entities=True)
tree = etree.parse('main.xml',parser=parser)

我需要load_dtd = True和resolve_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>

使用globals.xml

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY emptyEntry "<entry></entry>">

现在我想从非标准的lxml转移到标准的xml.etree.但是我的文件失败了,因为xml.etree不支持load_dtd = True和resolve_entities = True.

是否有一个xml.etree方式来解决这些实体?

解决方法

lxml是一个适合这项工作的工具.

但是,如果你想使用stdlib,那么请为困难做好准备并看看XMLParser的UseForeignDTD方法.这是一个很好的(但是hacky)例子:Python ElementTree support for parsing unknown XML entities?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读