如何用Python提取XML标签中的home id与away id值?
用Python提取XML中的home id和away id
方法一:使用xml.etree.ElementTree
假设你的XML结构类似以下示例:
<matches> <match> <home id="123">Team A</home> <away id="456">Team B</away> </match> <match> <home id="789">Team C</home> <away id="012">Team D</away> </match> </matches>
可以用以下代码提取id:
import xml.etree.ElementTree as ET # 加载XML文件(如果是字符串则用ET.fromstring(xml_str)) tree = ET.parse('matches.xml') root = tree.getroot() # 遍历match节点提取对应id for match in root.findall('match'): home_id = match.find('home').get('id') away_id = match.find('away').get('id') print(f"Home ID: {home_id}, Away ID: {away_id}")
如果XML带有命名空间(比如<ns:match>),需要指定命名空间参数:
# 假设命名空间为xmlns="http://example.com/matches" namespace = {'ns': 'http://example.com/matches'} for match in root.findall('ns:match', namespace): home_id = match.find('ns:home', namespace).get('id') away_id = match.find('ns:away', namespace).get('id') print(f"Home ID: {home_id}, Away ID: {away_id}")
方法二:使用BeautifulSoup
基于上述XML示例,用BeautifulSoup的实现代码:
from bs4 import BeautifulSoup # 读取XML文件(或直接传入XML字符串) with open('matches.xml', 'r') as f: xml_content = f.read() soup = BeautifulSoup(xml_content, 'xml') # 按match节点分组提取(更严谨) for match in soup.find_all('match'): home_id = match.find('home').get('id') away_id = match.find('away').get('id') print(f"Home ID: {home_id}, Away ID: {away_id}")
常见问题排查
- 找不到节点:检查标签名称是否完全匹配(区分大小写),是否存在嵌套层级错误,或XML有未处理的命名空间。
get('id')返回None:确认标签确实包含id属性,属性名拼写是否正确(比如是否是team_id而非id)。
内容的提问来源于stack exchange,提问作者mikeyb313
相关产品推荐
相关产品推荐

