求助:如何通过循环解析XML中多实例的F11标签(F1亦为多实例)
如何解析XML中嵌套且重复出现的F11标签?
问题背景
我有一个结构如下的XML文件:
<A><B><C> <D> . . . </D> <E> . . . . . </E> <F> <F1> <F11> . . . . . </F11> </F1> <F1> <F11> . . . . . . . </F11> </F1> </F> </C></B></A>
我想要解析其中的F11标签——它作为F1的子标签,两者都可能重复出现n次。目前我能统计出F1标签的数量,但不知道怎么进一步解析每个F1下的F11,我的代码如下:
from xml.dom.minidom import parseString if __name__ == "__main__": with open('final_resp.xml','r') as f: doc = (f.read()) dom = parseString(doc) f1_count = len(dom.getElementsByTagName('F1')) for x in range(0,f1_count): //parsing of each F1 tag
解决方案
没问题,其实你不用先统计F1的数量再用索引循环,getElementsByTagName返回的是一个可直接遍历的节点集合,而且每个F1节点也能调用这个方法来获取它的子节点F11。给你两种实用的实现方式:
方式一:逐层遍历(更清晰,适合需要处理F1节点的场景)
如果后续你还需要对F1节点做其他操作,这种逐层遍历的方式更直观:
from xml.dom.minidom import parseString if __name__ == "__main__": with open('final_resp.xml','r') as f: doc = f.read() dom = parseString(doc) # 获取所有F1节点并遍历 for f1_node in dom.getElementsByTagName('F1'): # 从当前F1节点下获取所有F11子节点 for f11_node in f1_node.getElementsByTagName('F11'): # 提取F11的文本内容(注意strip()去掉多余空格) f11_content = f11_node.firstChild.nodeValue.strip() print(f"解析到F11内容:{f11_content}")
方式二:直接定位F11(更简洁,适合只需要F11的场景)
如果你的XML里F11只会出现在F1节点下,完全可以直接全局获取所有F11节点,跳过F1的遍历步骤:
from xml.dom.minidom import parseString if __name__ == "__main__": with open('final_resp.xml','r') as f: doc = f.read() dom = parseString(doc) # 直接获取所有F11节点 for f11_node in dom.getElementsByTagName('F11'): f11_content = f11_node.firstChild.nodeValue.strip() print(f"解析到F11内容:{f11_content}")
小提示
- 不用再用
range(f1_count)这种方式遍历了,直接迭代getElementsByTagName返回的节点集合,代码更简洁也不容易出错。 - 如果
F11标签里除了文本还有其他子节点,你可能需要调整内容提取的逻辑,但如果是纯文本内容,firstChild.nodeValue就足够用啦。
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

