如何用Python合并XML中<recommendations>标签下的文本内容?
解决XML文本拼接生成新标签的问题
原XML内容
<recommendations> <para> <text>Text.</text> </para> <para> <text>Text2.</text> </para> </recommendations>
需求
用Python生成一个新的<recommendations>标签,将原标签中<text>节点的内容“Text.”与“Text2.”拼接为“Text.Text2.”。
你尝试的代码
xml_parsed = ET.parse(file) xml_parsed_root = xml_parsed.getroot() recommendations_root = item.findall(r'recommendations') for para in recommendations_root: for text in para: recommendations = ET.Element('recomendations') recommendations_root[text].text = text.text.append(recommendations) xml_root.append(item)
期望输出
<recommendations> Text.Text2. </recommendations>
问题分析与修正
你的代码存在几处明显问题:
- 变量
item未定义,直接调用item.findall会报错 - 新元素拼写错误:
recomendations应该是recommendations - 逻辑混乱:错误地尝试用
text.text.append赋值,还试图把元素作为文本内容设置
以下是正确的实现代码,分两种场景:
场景1:从文件解析XML
import xml.etree.ElementTree as ET # 解析XML文件 tree = ET.parse("your_file.xml") root = tree.getroot() # 提取所有<text>节点的文本并拼接 combined_text = "" for text_elem in root.findall(".//text"): combined_text += text_elem.text # 创建新的<recommendations>元素 new_recommendations = ET.Element("recommendations") new_recommendations.text = combined_text # 输出结果(如需保存到文件,可使用 ET.ElementTree(new_recommendations).write("output.xml")) ET.dump(new_recommendations)
场景2:从字符串解析XML
如果你的XML是字符串形式,用下面的代码:
import xml.etree.ElementTree as ET xml_str = """ <recommendations> <para> <text>Text.</text> </para> <para> <text>Text2.</text> </para> </recommendations> """ root = ET.fromstring(xml_str) combined_text = "".join([text_elem.text for text_elem in root.findall(".//text")]) new_recommendations = ET.Element("recommendations") new_recommendations.text = combined_text ET.dump(new_recommendations)
运行代码后会输出你期望的结果:
<recommendations>Text.Text2.</recommendations>
内容的提问来源于stack exchange,提问作者Thiago Oberle
相关产品推荐
相关产品推荐

