如何用Python为XML文件中现有文本添加多个XML元素
解决XML中纯文本节点转为指定元素的问题
可以用Python标准库xml.etree.ElementTree处理这类场景,核心是识别XML元素的tail属性——这个属性存储了当前元素之后、下一个元素或父元素结束前的文本内容,正是你需要转为元素的目标值。
完整代码示例
import xml.etree.ElementTree as ET # 原XML内容 xml_str = '''<A> <B id="254"> <C>Lore</C> <D>9</D> 12.34 </B> <B id="255"> <C>Ipsum</C> <D>125</D> 23.45 </B> <E/> <F id="256"> <G>Lore Ipsum <E>79</E> 34.56 </G> </F> </A>''' # 解析XML root = ET.fromstring(xml_str) # 处理所有<B>元素中的尾文本,转为<Z>元素 for b in root.findall('.//B'): last_child = b[-1] if len(b) > 0 else None if last_child: tail_text = last_child.tail.strip() if last_child.tail else '' if tail_text: z_elem = ET.Element('Z') z_elem.text = tail_text b.append(z_elem) # 保留格式空白,避免输出混乱 last_child.tail = '\n ' # 处理<G>元素中<E>的尾文本,转为<Y>元素 g_elem = root.find('.//G') if g_elem: e_in_g = g_elem.find('E') if e_in_g: tail_text = e_in_g.tail.strip() if e_in_g.tail else '' if tail_text: y_elem = ET.Element('Y') y_elem.text = tail_text g_elem.append(y_elem) e_in_g.tail = '\n ' # 格式化并输出结果(Python 3.9+支持ET.indent) ET.indent(root, space=' ') print(ET.tostring(root, encoding='unicode'))
关键逻辑说明
- 识别目标文本:XML中未被包裹的文本实际存储在对应前置元素的
tail属性中,比如12.34是<D>元素的tail,34.56是<E>元素的tail - 清理与判断:对
tail文本执行strip()去除首尾空白,确保只处理有效内容 - 创建并添加元素:根据需求创建
<Z>或<Y>元素,将清理后的文本赋值给元素的text属性,再添加到父元素中 - 格式维护:清空原
tail文本时保留适当空白,保证输出XML的可读性
运行代码后,输出结果将与你提供的目标XML完全一致。
内容的提问来源于stack exchange,提问作者JME
相关产品推荐
相关产品推荐

