python遍历带命名空间的xml_如何使用python使用默认命名空间获取xml文件中所有元素的xpath?...

我想在xml文件中获取每个元素的xpath.

xml文件:

xmlns="http://www.w3.org/TR/html4/"

xmlns:h="http://www.w3schools.com/furniture">

Apples

Bananas

python代码:

由于不允许使用默认命名空间中的空前缀,因此我使用了自己的前缀.

from lxml import etree

root=etree.parse(open("MyData.xml",'r'))

ns={'df': 'http://www.w3.org/TR/html4/', 'types': 'http://www.w3schools.com/furniture'}

for e in root.iter():

b=root.getpath(e)

print b

r=root.xpath(b,namespaces=ns)

#i need both b and r here

xpath是这样的(输出b)

/*

/*/*[1]

/*/*[1]/*[1]

/*/*[1]/*[1]/h:td

我无法正确获取具有默认命名空间的元素的xpath,它对于那些元素名称显示为*.如何正确获取xpath?

最佳答案 您可以使用getelementpath,它始终返回Clark表示法中的元素,并手动替换名称空间:

x = """

xmlns="http://www.w3.org/TR/html4/"

xmlns:h="http://www.w3schools.com/furniture">

Apples

Bananas

"""

from lxml import etree

root = etree.fromstring(x).getroottree()

ns = {'df': 'http://www.w3.org/TR/html4/', 'types': 'http://www.w3schools.com/furniture'}

for e in root.iter():

path = root.getelementpath(e)

root_path = '/' + root.getroot().tag

if path == '.':

path = root_path

else:

path = root_path + '/' + path

for ns_key in ns:

path = path.replace('{' + ns[ns_key] + '}', ns_key + ':')

print(path)

r = root.xpath(path, namespaces=ns)

print(r)

显然,这个例子表明getelementpath返回相对于根节点的路径,比如.和dt:table而不是/ df:root和/ df:root / df:table,所以我们使用root元素的标记来手动构建完整路径.

输出:

/df:root

[]

/df:root/df:table

[]

/df:root/df:table/df:tr

[]

/df:root/df:table/df:tr/types:td[1]

[]

/df:root/df:table/df:tr/types:td[2]

[]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值