当使用 lxml 渲染 XHTML 时,一切都很好,除非您碰巧使用 Firefox,它似乎无法处理以命名空间为前缀的 XHTML 元素和 javascript。虽然 Opera 能够很好地执行 javascript(这适用于 jQuery 和 MathJax),但无论 XHTML 命名空间是否有前缀(h:
在我的情况下),在 Firefox 中脚本都会中止并出现奇怪的错误this.head
(在MathJax 的例子)。
我知道这个register_namespace
函数,但它既不接受None
也不""
作为命名空间前缀。_namespace_map
我在模块中听说过lxml.etree
,但是我的 Python 抱怨这个属性不存在(版本问题?)
有没有其他方法可以删除 XHTML 命名空间的命名空间前缀?请注意str.replace
,正如对另一个相关问题的回答所建议的那样,这不是我可以接受的方法,因为它不了解 XML 语义并且可能很容易搞砸生成的文档。
根据要求,您会发现两个可以使用的示例。一种带有命名空间前缀,一种没有. 第一个将在 Firefox 中显示 0(错误),第二个将显示 1(正确)。Opera 将同时渲染两者正确。这显然是一个 Firefox 错误,但这只是作为希望使用 lxml 的无前缀 XHTML 的理由——还有其他很好的理由可以减少移动客户端的流量等(h:
如果您考虑数十或数百个 html 标签,甚至会相当多) .