首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用xml.etree (如lxml.etree )解析外部实体

如何使用xml.etree (如lxml.etree )解析外部实体
EN

Stack Overflow用户
提问于 2013-02-06 14:37:41
回答 2查看 4.5K关注 0票数 5

我有一个使用lxml.etree解析XML的脚本。

代码语言:javascript
复制
from lxml import etree

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

我需要load_dtd=Trueresolve_entities=True让来自globals.xml&emptyEntry;解决:

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY emptyEntry "<entry></entry>">

现在我想从非标准的lxml转到标准的xml.etree。但是这在我的文件中失败了,因为load_dtd=Trueresolve_entities=True不受xml.etree的支持。

是否有一个xml.etree**-way来解析这些实体?**

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-20 14:39:23

lxml是一个合适的工作工具。

但是,如果您想使用stdlib,那么就做好准备,看看XMLParser的UseForeignDTD方法。下面是一个很好(但很麻烦)的例子:Python ElementTree support for parsing unknown XML entities?

票数 0
EN

Stack Overflow用户

发布于 2013-10-16 09:59:58

我的诀窍是使用外部程序xmllint。

代码语言:javascript
复制
proc = subprocess.Popen(['xmllint','--noent',fname],stdout=subprocess.PIPE)
output = proc.communicate()[0]
tree = ElementTree.parse(StringIO.StringIO(output))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14731633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档