如何使用Python读取XML文件中的foo prolog?
读取XML中foo处理指令的实现方案
标准的xml.etree.ElementTree.parse()方法会自动忽略XML处理指令(即你提到的foo prolog),想要捕获这类内容,需要用事件驱动的迭代解析方式:
核心思路
使用ET.iterparse()指定监听processinginstruction事件,遍历解析过程中的事件,筛选出目标处理指令并提取其内容。
完整代码示例
import xml.etree.ElementTree as ET import re # 仅监听处理指令事件,逐行解析XML for event, pi in ET.iterparse("bar.xml", events=('processinginstruction',)): # 匹配目标处理指令foo if pi.target == 'foo': # pi.text 存储了处理指令中的属性内容,即 'class="abc"' print(f"foo处理指令内容: {pi.text}") # 提取class属性值 class_match = re.search(r'class="([^"]+)"', pi.text) if class_match: print(f"class属性值: {class_match.group(1)}") break # 找到目标后终止遍历,提升效率
补充说明
iterparse()仅会触发指定的事件类型,避免了全量加载XML到内存,适合处理大文件- 处理指令对象的
target属性对应<?后的标识(即foo),text属性对应指令内的所有文本内容 - 如果需要更严谨的属性解析(比如处理带特殊字符的属性值),可以自行实现简单的键值对拆分逻辑,无需依赖额外库
内容的提问来源于stack exchange,提问作者Nico Schlömer
相关产品推荐
相关产品推荐

