[英]Python: Which XML parser supports DTD !ENTITY definitions?
我有下面的XML文件,目前我使用的是minidom,我得到的例子是documentElement
的tagName
为xyz:widget
,告诉我它忽略了!ENTITY
定义 ,因此忽略了!DOCTYPE
引用。
哪个XML解析器支持文档类型定义,以便不会忽略!ENTITY定义和!DOCTYPE引用:
<?xml version="1.0" standalone="yes" ?>
<!DOCTYPE widget [
<!ENTITY widgets-ns "http://www.w3.org/ns/widgets">
<!ENTITY pass "pass&.html">
]>
<xyz:widget xmlns:xyz="&widgets-ns;">
<xyz:content src="&pass;"/>
<xyz:name>bv</xyz:name>
</xyz:widget>
因此,对于上面的示例,您可以使用python等效的XML
:
<widget xmlns="http://www.w3.org/ns/widgets">
<content src="pass&.html"/>
<name>bv</name>
</widget>
或者获取一个DOM
作为一个documentElement
作为widget
,它的childNodes
作为content
和name
, widget
属性作为xmlns
,值为http://www.w3.org/ns/widgets
等
我可能没有使用正确的术语,但我希望在上面的例子的帮助下我明白了。
LXML处理这个很好:
>>> from lxml import etree
>>> s = """<?xml version="1.0" standalone="yes" ?>
... <!DOCTYPE widget [
... <!ENTITY widgets-ns "http://www.w3.org/ns/widgets">
... <!ENTITY pass "pass&.html">
... ]>
... <xyz:widget xmlns:xyz="&widgets-ns;">
... <xyz:content src="&pass;"/>
... <xyz:name>bv</xyz:name>
... </xyz:widget>
... """
>>> etree.fromstring(s)
<Element {http://www.w3.org/ns/widgets}widget at 7f4de2cc58e8>
>>> etree.fromstring(s).xpath("//xyz:content/@src",
... namespaces={"xyz": "http://www.w3.org/ns/widgets"})
['pass&.html']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.