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

Python解析XML时如何通过节点名称修改子节点文本(含命名空间)

Python修改带命名空间的XML节点文本

需求说明

  • 通过指定节点名称批量修改XML中子节点的文本内容,目标XML包含命名空间(节点名称带冒号)
  • 已可通过命名空间定位目标节点,但修改文本时触发类型错误

现有代码与问题

可正常获取节点内容的代码

from lxml import etree
tree = etree.parse("myxmlfile.xml")
ns = {'ns1': 'http://www.somewebsite.com'}
for group in tree.findall('ns1:BlockGroup', ns):
    priority = group.find('ns1:Priority', ns)
    print(priority.text)
# 输出:1

修改时报错的代码

for group in tree.findall('ns1:BlockGroup', ns):
    priority = group.find('ns1:Priority', ns)
    priority.text = 2

错误信息

TypeError: Argument must be bytes or unicode, got 'int'

解决办法

  • 问题根源:XML节点的text属性要求赋值为字符串(unicode/bytes)类型,直接传入整数2会触发类型不匹配错误
  • 修改代码,将整数转为字符串即可:
for group in tree.findall('ns1:BlockGroup', ns):
    priority = group.find('ns1:Priority', ns)
    priority.text = "2"  # 用字符串类型赋值

批量修改同名节点的简洁方案

若要批量修改所有ns1:Priority节点,可使用XPath简化代码:

for priority_node in tree.xpath('//ns1:Priority', namespaces=ns):
    priority_node.text = "2"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:05:05