Python:哪个XML解析器支持DTD!实体定义?

2024-04-25 15:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的XML文件,目前我正在使用minidom,并以documentElement的{}为xyz:widget,它告诉我它忽略了^{} definitions,从而忽略了^{cd5>}引用。在

哪个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&amp;.html">
]>
<xyz:widget xmlns:xyz="&widgets-ns;">
  <xyz:content src="&pass;"/>
  <xyz:name>bv</xyz:name>
</xyz:widget>

因此,对于上面的例子,您可以使用python得到XML等价的:

^{pr2}$

或者得到一个DOM,它的documentElementwidget,其childNodescontent和{},widget属性为xmlns,值为{},等等

我可能没有使用正确的术语,但我希望通过上面的例子,我可以清楚地说明自己。在


Tags: 文件namepassxmlcontentwidgetswidgetdoctype
1条回答
网友
1楼 · 发布于 2024-04-25 15:16:47

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&amp;.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']

相关问题 更多 >