如何用XPath根据属性值获取XML元素标签名?解决表达式报错
解决XPath获取节点标签名称的错误
问题原因
你写的//*[@node="{node}"]/name()是无效的XPath表达式——在XPath 1.0中,name()是节点函数,不能作为路径的子节点部分使用,你错误地将它当成了路径的一部分,导致语法报错。
正确写法
先定位到目标节点,再对节点调用name()函数获取标签名称,同时可以复用节点对象获取文本,避免重复查询:
for node in nodes: # 先定位到所有匹配的节点 target_nodes = response.xpath(f'//*[@node="{node}"]') if target_nodes: # 获取第一个匹配节点的标签名称 get_name = target_nodes.xpath('name()').get() # 获取节点内的文本内容(和你原来的逻辑一致) get_text = target_nodes.xpath('.//text()').extract() # 如果要获取所有匹配节点的标签名,用getall() # get_names = target_nodes.xpath('name()').getall()
示例验证
针对你提供的XML:
<a node='1'>This</a> <b node='2'>Is</b> <c node='23'>A</c> <d selector='g'>Loud</d> <e node='4'>Dog</e>
当node的值为'2'时:
get_name会返回'b'get_text会返回['Is']
内容的提问来源于stack exchange,提问作者SC4RECROW
相关产品推荐
相关产品推荐

