如何在Python中无需知晓XML结构提取CurrencyPair元素值
在Python中提取XML中所有元素的内容
当然可以实现,下面是两种常用的方法,不管XML结构多复杂,都能抓取到所有层级的<CurrencyPair>元素内容:
方法一:使用Python标准库 xml.etree.ElementTree
无需额外安装依赖,适合大多数场景:
import xml.etree.ElementTree as ET def get_currency_pairs(xml_file_path): # 解析XML文件 tree = ET.parse(xml_file_path) root = tree.getroot() # 遍历所有层级的<CurrencyPair>元素,提取非空内容并去除首尾空白 return [pair.text.strip() for pair in root.iter('CurrencyPair') if pair.text] # 调用示例 currency_pairs = get_currency_pairs("your_xml_file.xml") print(currency_pairs)
root.iter('CurrencyPair')会递归遍历XML中所有层级的目标元素,完全不受XML结构差异影响。
方法二:使用lxml库(更灵活,适合复杂XML场景)
如果需要处理带命名空间的XML,或者更复杂的查询逻辑,lxml的XPath功能会更顺手。先安装依赖:
pip install lxml
代码示例:
from lxml import etree def get_currency_pairs_lxml(xml_file_path): tree = etree.parse(xml_file_path) # 使用XPath匹配任意层级的<CurrencyPair>元素 pair_elements = tree.xpath('//CurrencyPair') # 提取内容并过滤空值 return [pair.text.strip() for pair in pair_elements if pair.text] # 调用示例 currency_pairs = get_currency_pairs_lxml("your_xml_file.xml") print(currency_pairs)
处理带命名空间的XML
如果你的XML包含命名空间(比如xmlns="http://example.com/finance"),只需在XPath中指定命名空间:
# 定义命名空间映射 namespaces = {'fin': 'http://example.com/finance'} # 调整XPath语法 pair_elements = tree.xpath('//fin:CurrencyPair', namespaces=namespaces)
注意点
- 加入
if pair.text是为了过滤那些<CurrencyPair></CurrencyPair>的空元素 strip()用于去除内容前后的空格、换行符等冗余字符
内容的提问来源于stack exchange,提问作者cursed bunny
相关产品推荐
相关产品推荐

