如何从XML任意位置提取不依赖固定索引的目标值
提取dir命令文件统计字段的实现方案
不要硬编码line节点的index属性,用「结构化XML解析+固定特征正则匹配」的方案就能适配任意位置的目标字段,稳定性远高于位置硬编码,具体实现逻辑如下:
- 先做标准XML解析:不要直接用正则扫整个XML原始字符串,避免把标签属性、节点注释里的无关内容误判为目标值。解析完成后遍历所有层级的
<line>节点,取出每个节点的纯文本内容即可,不需要关心节点所在路径、index属性值。 - 再做特征规则匹配:dir命令输出的文件统计行有固定的格式特征,用正则
^\s*\d+\s+File\(s\)\s+[\d,]+\s+bytes\s*$逐行匹配提取到的line文本即可,匹配到的内容就是目标字段。
规则说明:这个正则抓的是文件统计行的固定结构——开头任意空白+文件数数字+固定标识
File(s)+带千分位分隔符的字节数+固定结尾bytes,不会和目录统计行(标识为Dir(s))、普通文件列表行(带日期、时间、文件名)、其他提示文本混淆。哪怕后续命令输出新增了其他行、目标字段位置偏移,甚至一个返回结果里包含多个目录的统计值,都能准确提取。
Python实现参考代码:
import xml.etree.ElementTree as ET import re def extract_file_stat(xml_raw: str) -> list[str]: root = ET.fromstring(xml_raw) file_stat_pattern = re.compile(r'^\s*\d+\s+File\(s\)\s+[\d,]+\s+bytes\s*$') result = [] # 遍历所有line节点,不受层级、位置限制 for line in root.iter('line'): line_content = line.text if line_content and file_stat_pattern.match(line_content): result.append(line_content) return result
内容的提问来源于stack exchange,提问作者Coder_Black
相关产品推荐
相关产品推荐

