这个最小的XHTML片段:
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Title</title>
</head>
<body>
<h1>Subtitle</h1>
</body>
</html>
使用lxml处理以下内容时:
from lxml import etree
root = etree.fromstring('''\
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Title</title>
</head>
<body>
<h1>Subtitle</h1>
</body>
</html>
''')
for e in root.iter():
print(e.tag)
产生以下结果:
{http://www.w3.org/1999/xhtml}html
{http://www.w3.org/1999/xhtml}head
{http://www.w3.org/1999/xhtml}title
{http://www.w3.org/1999/xhtml}body
{http://www.w3.org/1999/xhtml}h1
即:它在 all 标记之前加上xmlns
属性值为namespace
。
我可以理解这实际上是“正确的方法”,但这也是真正的PITA,尤其是当您需要大量使用XPath时(除非合适的{{1 }}随处可见)。
我还尝试使用以下内容:
namespaces="..."
但它似乎没有任何改变。
是否有某种方法可以摆脱这个(无用的!)命名空间(当然,缺少编辑文件以删除parser = etree.XMLParser(ns_clean=True, no_network=True, remove_comments=True, remove_pis=True)
doc = etree.parse(fi, parser)
声明的权限)?