我有下面的 XML 文件,目前我正在使用 minidom,我得到的例子是 documentElement
的 tagName
是 xyz:widget
告诉我它忽略了 !ENTITY
definitions以及 !DOCTYPE
引用。
哪个 XML 解析器支持 Document Type Definitions这样!ENTITY definitions并且 !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/小部件
等
我可能没有使用正确的术语,但我希望我在上面的例子的帮助下说清楚了。
最佳答案
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']
关于Python:哪个 XML 解析器支持 DTD !ENTITY 定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729239/