>>> from lxml.etree import HTML, tostring
>>> tostring(HTML('<fb:like>'))
'<html><body><like/></body></html>'
注意标签如何从<fb:like>
简单地<like>
.
这使得处理将 XFBML 与 lxml 结合在一起的页面变得更加困难。 (同样的事情也发生在<g:plusone></g:plusone>
)
任何帮助表示赞赏。
解决此问题的一种方法是.
参考libxml2.9.2的源码(https://git.gnome.org/browse/libxml2/tree/?id=v2.9.2),在SAX2.c中(https://git.gnome.org/browse /libxml2/tree/SAX2.c?id=v2.9.2) (用于创建 DOM 树的内部 SAX 解析器)在第 1699 行,带有 xmlns 的属性在 HTML 模式下不会被解析,并且它们会像任何其他属性一样被解析行和 1740。因此,调整第 1622 行是有意义的,该行将名称分为前缀和本地部分。改变:
name = xmlSplitQName(ctxt, fullname, &prefix);
into
if (!ctxt->html) {
name = xmlSplitQName(ctxt, fullname, &prefix);
} else {
name = xmlStrdup(fullname);
prefix = NULL;
}
然后 libxml2 会考虑诸如<o:p>
用于具有名称的元素o:p
,即元素名称中包含冒号,没有特殊含义。这是 HTML 中的正确解释。例如,HTML5 规范说 http://www.w3.org/TR/html5/infrastructure.html#namespaces:
在 HTML 语法中,命名空间前缀和命名空间声明与 XML 中的效果不同。例如,冒号在 HTML 元素名称中没有特殊含义。
希望 libxml2 的未来版本能够批准这一更改。有一个开放的错误报告(https://bugzilla.gnome.org/show_bug.cgi?id=654146)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)