lxm中cssselect的XHTML命名空间问题

2024-06-28 10:05:08 发布

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

我在使用XHTML(或带有名称空间的XML)时遇到问题。尽管文档中说了如何在csselect中使用命名空间,但我不理解它:cssselect namespaces

我的输入XHTML字符串:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Teststylesheet</title>
  <style type="text/css">
  /*<![CDATA[*/
  ol{margin:0;padding:0}
  /*]]>*/
  </style>
</head>
<body>
</body>
</html>

我的Python脚本:

^{pr2}$

python脚本不打印任何Have CSS!。使用etree.HTMLParser而不是{}可以工作,但我真的希望使用XMLParser并保留XHTML的所有内容(名称空间、结构)。在

有人能帮我解决这个命名空间问题吗?在


Tags: org名称httptitlestylehtmlwww空间
1条回答
网友
1楼 · 发布于 2024-06-28 10:05:08

cssselect.CSSSelector(版本2.0)的doc字符串显示了如何使用名称空间:

class CSSSelector(etree.XPath):
    """ ...
    To use CSS namespaces, you need to pass a prefix-to-namespace
    mapping as ``namespaces`` keyword argument::

        >>> rdfns = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
        >>> select_ns = cssselect.CSSSelector('root > rdf|Description',
        ...                                   namespaces={'rdf': rdfns})

        >>> rdf = etree.XML((
        ...     '<root xmlns:rdf="%s">'
        ...       '<rdf:Description>blah</rdf:Description>'
        ...     '</root>') % rdfns)
        >>> [(el.tag, el.text) for el in select_ns(rdf)]
        [('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description', 'blah')]
    """

如果您尝试过这样做,但是您的cssselect.CSSSelector版本没有namespaces参数,那么您的lxml版本可能需要升级。在

相关问题 更多 >