没有简单的方法可以透明地处理默认名称空间。正如您已经提到的,为空名称空间分配非空名称是一种常见的解决方案:
ns = {"mvn":"http://maven.apache.org/POM/4.0.0"}pom = xml.etree.ElementTree.parse("pom.xml")print(pom.findall("mvn:version", ns))
请注意,
lxml.etree不允许显式使用空名称空间。您将获得:
ValueError:ElementPath不支持空名称空间前缀
但是,通过在加载XML输入数据时删除默认的名称空间定义,可以使事情变得更简单:
import xml.etree.ElementTree as ETimport rewith open("pom.xml") as f: xmlstring = f.read()# Remove the default namespace definition (xmlns="http://some/namespace")xmlstring = re.sub(r'sxmlns="[^"]+"', '', xmlstring, count=1)pom = ET.fromstring(xmlstring) print(pom.findall("version"))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)