You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的BeautifulSoup提取XML指定元素并生成DataFrame

提取XML指定元素到DataFrame的简洁方案

给定如下XML数据:

xmlfile = '''           <Trainers>
                <Trainers name="VisitorID" value="NPRoiuKL213kiolkm2231"></Trainers>
                <Trainers name="VisitorNumber" value="BR-76594823-009922"></Trainers>
                <Trainers name="ServerIndex" value="213122"></Trainers>
                <Trainers name="VisitorPolicyID" value="ETR1234123"></Trainers>
            </Trainers>
            <Managers>
                <visitorstate>InProgress</visitorstate>
                <visitorrenewal lastupdated="2022-04-02"></visitorrenewal>
                <administrator>ROH</administrator>
                <carrier>Verizon</carrier>
                <carriernetwork>Verizon</carriernetwork>
                <carriergroupservice>Nokia</carriergroupservice>
                <programID>E3-ROH</programID>
                <RecordSystem>ATServer</RecordSystem>
                <ZipCode>ES2421</ZipCode>
                <SignerZipCode>ES2421</SignerZipCode>
                <RecieverZipCode>ES2421</RecieverZipCode>
                <version>19</version>
                <archived>false</archived>
                <SignalID>A3-213-3412</SignalID>
                <NetworkID>ProNetwork</NetworkID>
                <NetworkLocationID>ES2421</NetworkLocationID>
                <dataitem name="ProcessingVisitorId" value="Interior"></dataitem>
                <dataitem name="ProcessingVisitingInstance" value="eft-6"></dataitem>
                <Highlights>
                    <Highlight name="ScreenLock" value="true"></Highlight>
                    <Highlight name="locked" value="true"></Highlight>
                </Highlights>
            </Managers>'''

需要提取的目标元素列表(修正为字符串格式):

list_of_search_elements = ["VisitorID", "VisitorNumber", "ServerIndex", "VisitorPolicyID", 
                          "visitorrenewal", "carriernetwork", "ZipCode", "version", 
                          "NetworkLocationID", "ProcessingVisitingInstance", "ScreenLock"]

简洁实现方案

无需复杂的标签拆分逻辑,直接针对目标元素定位提取,同时完成存在性验证:

from bs4 import BeautifulSoup
import pandas as pd

# 初始化解析器
soup = BeautifulSoup(xmlfile, 'lxml')

# 存储提取结果的列表
result_data = []

# 遍历目标元素逐个处理
for elem_name in list_of_search_elements:
    # 情况1:处理Trainers下的子元素(name属性匹配目标名)
    trainer_tag = soup.find('Trainers', {'name': elem_name})
    if trainer_tag:
        result_data.append({
            'Group': 'Trainers',
            'Name': elem_name,
            'Value': trainer_tag.get('value')
        })
        continue
    
    # 情况2:处理Managers下的直接子元素(标签名匹配目标名)
    manager_tag = soup.find(elem_name)
    if manager_tag:
        # 特殊处理visitorrenewal,取lastupdated属性
        val = manager_tag.get('lastupdated') if elem_name == 'visitorrenewal' else manager_tag.text.strip()
        result_data.append({
            'Group': 'Managers',
            'Name': elem_name,
            'Value': val
        })
        continue
    
    # 情况3:处理dataitem元素(name属性匹配目标名)
    dataitem_tag = soup.find('dataitem', {'name': elem_name})
    if dataitem_tag:
        result_data.append({
            'Group': 'Managers',
            'Name': elem_name,
            'Value': dataitem_tag.get('value')
        })
        continue
    
    # 情况4:处理Highlights下的Highlight元素(name属性匹配目标名)
    highlight_tag = soup.find('Highlight', {'name': elem_name})
    if highlight_tag:
        result_data.append({
            'Group': 'Highlights',
            'Name': elem_name,
            'Value': highlight_tag.get('value')
        })
        continue
    
    # 元素未找到的情况,记录验证结果
    result_data.append({
        'Group': '未找到',
        'Name': elem_name,
        'Value': '元素不存在'
    })

# 转为DataFrame
df = pd.DataFrame(result_data)

最终输出表格

GroupNameValue
TrainersVisitorIDNPRoiuKL213kiolkm2231
TrainersVisitorNumberBR-76594823-009922
TrainersServerIndex213122
TrainersVisitorPolicyIDETR1234123
Managersvisitorrenewal2022-04-02
ManagerscarriernetworkVerizon
ManagersZipCodeES2421
Managersversion19
ManagersNetworkLocationIDES2421
ManagersProcessingVisitingInstanceeft-6
HighlightsScreenLocktrue

内容的提问来源于stack exchange,提问作者Hamza Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:37:08