Python如何拆分多行字符串变量并提取XML中package标签存入列表
你代码里的问题
- 内层循环中你调用了
packageList.append(splitPackage),这里splitPackage是拆分后得到的整行列表,每次循环都把整个列表追加进去,最终会得到嵌套的列表,正确写法应该是追加单个元素package。 - 直接按换行拆分后会包含XML声明、根标签
<packages>、闭合标签</packages>以及空行,和你需要的结果不符,需要加筛选逻辑。
方案1:固定格式下的字符串处理(简单快速)
如果你的XML格式固定,所有<package>标签都单独占一行,可以直接用字符串匹配筛选:
# 替换为你实际的XML字符串变量 xml_content = '''<?xml version="1.0" encoding="UTF-8"?> <packages> <package name="firstPackage" version="LATEST" params="xxx" force="false"/> <package name="secondPackage" version="LATEST" params="xxx" force="false"/> </packages>''' packages = [] for line in xml_content.split('\n'): # 去除行前后的空格、制表符 cleaned_line = line.strip() # 只保留符合package标签格式的行 if cleaned_line.startswith('<package ') and cleaned_line.endswith('/>'): packages.append(cleaned_line) # 输出结果和你要求的完全一致 print(packages)
方案2:XML解析器处理(更稳妥,推荐)
XML格式如果出现排版变化(比如标签不单独占一行、属性换行),字符串匹配就会失效,用Python自带的XML解析库处理更规范,不受排版影响:
import xml.etree.ElementTree as ET xml_content = '''<?xml version="1.0" encoding="UTF-8"?> <packages> <package name="firstPackage" version="LATEST" params="xxx" force="false"/> <package name="secondPackage" version="LATEST" params="xxx" force="false"/> </packages>''' packages = [] # 解析XML root = ET.fromstring(xml_content) # 查找所有package节点 for pkg_node in root.findall('package'): # 将节点转回字符串格式 pkg_str = ET.tostring(pkg_node, encoding='unicode', short_empty_elements=True).strip() packages.append(pkg_str) print(packages)
注意:如果你的XML字符串本身存放在variableList列表中,外层加一层遍历variableList的循环即可,逻辑和上面一致
内容的提问来源于stack exchange,提问作者Christian Townsend
相关产品推荐
相关产品推荐

