使用lxml呈现XHTML时,一切都很好,除非您碰巧使用Firefox,它似乎无法处理以名称空间为前缀的XHTML元素和javascript。虽然Opera能够执行javascript(这适用于jQuery和MathJax),但无论XHTML命名空间是否有前缀(在我的情况下为h:
),在Firefox中,脚本都会以奇怪的错误中止(this.head
是在MathJax的情况下,未定义)。在lxml中定义默认命名空间(前缀不足)
我知道register_namespace
函数,但它既不接受None
也不接受""
作为命名空间前缀。我听说_namespace_map
在lxml.etree
模块,但我的Python抱怨说这个属性不存在(版本问题?)
是否有任何其他方式删除XHTML命名空间的命名空间前缀?请注意,str.replace
,正如对另一个相关问题的答案中所建议的,是而不是我可以接受的一种方法,因为它不知道XML语义,并且可能容易搞砸所产生的文档。
根据要求,你会发现两个例子可以使用。一个与namespace prefixes和one without。第一个将在Firefox中显示0(错误),第二个将显示1(正确)。 Opera将渲染两个正确的。这显然是a Firefox bug,但这仅仅是希望用lxml获得前缀XHTML的理由 - 还有其他一些很好的理由来减少移动客户端的流量等等(如果你考虑数十或者更多的html标签,甚至可以使用h:
)。
样本XHTML是否可用?一个可以用于其他人测试/使用的小型自包含示例? –
我会在一分钟内设置一个示例。 –