小风_ 2022-04-29 13:46 采纳率: 100%
浏览 32
已结题

利用python进行xml解析的问题

如图,如何基于Python,指定特定的序号index,得到对应的4个坐标值,返回用字典即可

img

  • 写回答

2条回答 默认 最新

  • 「已注销」 2022-04-29 16:02
    关注
    
    from bs4 import BeautifulSoup
    import json
    
    
    # 测试
    xml_file = """
    <segementation_result>
        <frame index="1" rejected="false">
            <point name="bl" x="123" y="467"/>
            <point name="tl" x="234" y="768"/>
            <point name="tr" x="234" y="77"/>
            <point name="br" x="724" y="775"/>
        </frame>
        <frame index="2" rejected="false">
            <point name="bl" x="13" y="987"/>
            <point name="tl" x="33" y="578"/>
            <point name="tr" x="345" y="653"/>
            <point name="br" x="675" y="564"/>
        </frame>
    </segementation_result>
    """
    # 定义函数 frame_index_value 的index值, xml_file 
    
    
    def get_frame_point(frame_index_value: int, xml_file: str) -> dict:
        # 解析xml
        soup = BeautifulSoup(xml_file, "xml")
        # 定义字典
        frame_points = {}
    
        for items in soup.find_all('frame'):
            # frame 对应的index当key
            frame_points[items.get("index")] = []
            for item in items.find_all('point'):
                # 定义point字典
                point = {}
                # point 对应的name当key, 值为列表, 存储, (x,y)
                point[item.get("name")] = (item.get("x"), item.get("y"))
                # 写入点值
                frame_points[items.get("index")].append(point)
        # 返回 frame_index_value 对应的点
        return frame_points.get(str(frame_index_value))
    
    
    if __name__ == "__main__":
        print(get_frame_point(1, xml_file))
    
    
    [{'bl': ('123', '467')}, {'tl': ('234', '768')}, {'tr': ('234', '77')}, {'br': ('724', '775')}]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 修改了问题 4月29日
  • 创建了问题 4月29日

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)