[英]LXML namespace prefix
为什么以下“正常” XPath 不能使用 lxml 工作:
# Note: "Rows" is obviously not a real namespace, but for internal segmentation
xml_str = '''
<Data xmlns:R="Rows" xmlns:C="Columns" xmlns:V="Values">
<R:ProductGroup value="Electronics">
<R:Product value="Computer">
<C:Year value="2018">
<V:SumOfRevenue value="104"/>
<V:SumOfUnits value="3"/>
</C:Year>
<C:Year value="2019">
<V:SumOfRevenue value="82"/>
<V:SumOfUnits value="9"/>
</C:Year>
<C:Year value="(all)">
<V:SumOfRevenue value="186"/>
<V:SumOfUnits value="12"/>
</C:Year>
</R:Product>
</R:ProductGroup>
</Data>
'''
from lxml import etree
node=etree.fromstring(xml_str)
//R:ProductGroup[@value="Electronics"]
按照标准是有效的 XPath 并且可以在其他几个实用程序中使用,但似乎lxml
有一种非常奇怪的命名空间寻址方式:
node.xpath('//R:ProductGroup[@value="Electronics"]', namespaces={'R':'Rows'})
[<Element {Rows}ProductGroup at 0x7f05836bec08>]
是否可以在不将其定义为 xpath 旁边的字典的情况下寻址命名空间?
它不一定比使用命名空间更优雅,但这会让你到达同一个地方:
node.xpath('//*[local-name()="ProductGroup"][@value="Electronics"]')
Output:
[<Element {Rows}ProductGroup at 0x1790b6fb240>]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.