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

标签 python xml python-2.7 xml-namespaces minidom

我有下面的 XML 文件,目前我正在使用 minidom,我得到的例子是 documentElementtagNamexyz: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&amp;.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&amp;.html"/>
  <name>bv</name>
</widget>

或者获取一个 DOM,它有一个 documentElement 作为 widget 并且它的 childNodes 作为 contentnamewidget 属性为 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&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']

关于Python:哪个 XML 解析器支持 DTD !ENTITY 定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729239/

相关文章:

python - pytorch 如何计算简单线性回归模型的梯度?

python - virtualenvwrapper 不会在 mac os 上创建/bin/目录

python - 如何将变量传递给 python 脚本?

java - 在 XML 中将 Spring 列表创建为 bean

python - 无法使用 python 向 mysql 插入值

python - 用 numpy 数组对任意数求幂

regex - Bash - 包含唯一字母数字字符串的 XML 标签内的 grep 文本

xml - 如何根据属性选择有条件的节点

python - 良好做法默认值

python - 在 Python 3 中抑制 "Exception ... ignored"消息的打印输出