You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3.6下如何用lxml.etree获取XML父标签的属性

使用lxml.etree获取XML父标签的属性(Python 3.6)

我来帮你完善这部分代码,结合你已经实现的请求XML、遍历元素的逻辑,咱们直接搞定父标签属性的获取:

核心思路

lxml.etree的元素对象自带getparent()方法可以直接拿到父节点,再用get()方法就能轻松取出指定属性值,完全不需要复杂的路径拼接。

完整示例代码

import requests
from lxml import etree

# 1. 你的请求XML逻辑(假设已经实现,这里直接复用)
xml_url = "你的XML数据源地址"
resp = requests.get(xml_url)
resp.encoding = "utf-8"  # 根据实际XML编码调整

# 2. 解析XML内容
xml_root = etree.fromstring(resp.content)

# 3. 遍历目标元素(替换成你实际要处理的标签,比如//item)
for target_elem in xml_root.xpath("//item"):
    # 获取直接父标签
    parent_elem = target_elem.getparent()
    
    # 避免根节点无父标签的情况,加个判断
    if parent_elem is not None:
        # 获取父标签的KEY、NAME属性,不存在则返回None(也可以设默认值)
        parent_key = parent_elem.get("KEY")
        parent_name = parent_elem.get("NAME", "未设置NAME属性")  # 这里给NAME加了默认值
        
        # 输出或处理结果
        print(f"当前元素: {target_elem.tag}")
        print(f"父标签: {parent_elem.tag}")
        print(f"父标签KEY: {parent_key}")
        print(f"父标签NAME: {parent_name}")
        print("-" * 30)

扩展:获取所有祖先标签的属性

如果需要获取当前元素的所有父级祖先标签的属性,可以写个小循环来实现:

def get_all_ancestors(element):
    """获取元素的所有祖先节点,从直接父到根节点"""
    ancestors = []
    current_parent = element.getparent()
    while current_parent is not None:
        ancestors.append(current_parent)
        current_parent = current_parent.getparent()
    return ancestors

# 使用示例
for target_elem in xml_root.xpath("//item"):
    all_ancestors = get_all_ancestors(target_elem)
    print(f"元素{target_elem.tag}的所有祖先属性:")
    # 倒序遍历,从根节点到直接父节点
    for idx, ancestor in enumerate(reversed(all_ancestors)):
        key = ancestor.get("KEY")
        name = ancestor.get("NAME", "无")
        print(f"第{idx+1}级祖先({ancestor.tag}): KEY={key}, NAME={name}")
    print("-" * 30)

关键方法说明

  • element.getparent():返回当前元素的直接父节点,根节点调用会返回None,记得加判断避免报错
  • element.get(attr_name, default_value):获取元素的指定属性,第二个参数可选,用于设置属性不存在时的默认值

内容的提问来源于stack exchange,提问作者question.it

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:21:04