如何使用带通配符的标签查找XML节点?基于lxml的xpath实现标签前缀匹配
查找XML中指定前缀标签节点的实现方法
需求说明
需要在XML文档的general节点下,筛选出所有标签名以v开头的元素节点。
示例XML结构
<data> <general> <va value="400" /> <!--looking for this "v-tag"--> <vb value="42" /> <!-- and this one--> <y value="43" /> </general> <special> <va value="100" /> </special> </data>
原有代码问题
你之前编写的xpathgeneral/[tag='v*']不符合语法规范,不存在tag这个默认属性,且通配符*不能直接在字符串匹配中这么使用。
正确实现代码
使用XPath 1.0内置的starts-with函数做前缀匹配即可,lxml完全支持该语法:
import lxml.etree xyz = lxml.etree.parse(你的XML文件路径) # 核心xpath:匹配general下所有标签名以v开头的子节点 vees = xyz.xpath("general/*[starts-with(local-name(), 'v')]")
表达式说明
general/:限定查找范围为general节点的直接子节点*:匹配任意标签的子节点starts-with(local-name(), 'v'):过滤条件,取节点的本地名称(兼容带命名空间的XML场景),判断是否以字符v开头。如果你的XML没有命名空间,也可以替换为starts-with(name(), 'v')
输出效果
执行后vees变量结果符合预期:
vees Out[64]: [<Element va at 0x....>, <Element vb at 0x...>]
内容的提问来源于stack exchange,提问作者Axel
相关产品推荐
相关产品推荐

