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

如何在lxml的etree中仅打印元素的开始标签?

仅打印lxml etree Element的开始标签(调试专用)

当调试XML/HTML结构时,有时我们只需要查看Element的开始标签及属性,而非整个子树。但etree.tostring()默认会输出完整的元素树,对于复杂结构来说冗余信息太多。

问题重现

from lxml import etree
elem = etree.fromstring(b'''<bbq taste="awful" smell="amazing">
<food type="hot dogs" />
<food type="hamburgers" condition="burnt" />
</bbq>''')

# 默认输出完整树结构
print(etree.tostring(elem).decode())

输出:

<bbq taste="awful" smell="amazing">
<food type="hot dogs"/>
<food type="hamburgers" condition="burnt"/>
</bbq>

实现目标效果

我们需要只输出开始标签,类似etree.tostring(elem, open_tag_only=True)的效果,可通过自定义函数实现:

方法1:直接生成开始标签字符串

def get_open_tag(elem):
    # 拼接标签名
    tag_str = f"<{elem.tag}"
    # 遍历并添加所有属性
    for attr_name, attr_value in elem.items():
        tag_str += f' {attr_name}="{attr_value}"'
    # 闭合开始标签
    tag_str += ">"
    return tag_str

# 使用示例
print(get_open_tag(elem))

输出:

<bbq taste="awful" smell="amazing">

方法2:模拟etree.tostring的调用风格

如果习惯用类似tostring的接口,可写一个带编码参数的包装函数:

def tostring_open_tag(elem, encoding='utf-8'):
    tag_str = f"<{elem.tag}"
    for attr_key, attr_val in elem.items():
        tag_str += f' {attr_key}="{attr_val}"'
    tag_str += ">"
    return tag_str.encode(encoding) if encoding else tag_str

# 调用方式与tostring一致
print(tostring_open_tag(elem).decode())

输出同上。

这种方式轻量直接,完全满足调试时快速查看元素标签和属性的需求。

内容的提问来源于stack exchange,提问作者NeatNit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:08:28