tsqgxq 2021-11-22 12:53 采纳率: 50%
浏览 65
已结题

读取xml文件,某个节点有值,但读取为空

<Approach_Locking_Areas Last_SyDB_Version_ID_Memorized="0.0.0" Data_Familly="DF52">
    <Approach_Locking_Area Name="ALS_S50103_Up" ID="110">
        <Approach_Locking_Block_List>
            <Block_ID>424</Block_ID>
            <Block_ID>954</Block_ID>
            <Block_ID>955</Block_ID>
            <Block_ID>956</Block_ID>
            <Block_ID>957</Block_ID>
            <Block_ID>958</Block_ID>
            <Block_ID>959</Block_ID>
        </Approach_Locking_Block_List>
        <Approach_Locking_Area_Partially_Covered_By_Uevol>false</Approach_Locking_Area_Partially_Covered_By_Uevol>
        <Added_By_BMCP_Block_ID_List>
            <Block_ID_Not_Defined>0</Block_ID_Not_Defined>
        </Added_By_BMCP_Block_ID_List>
        <Emergency_Route_Release_Time>56900</Emergency_Route_Release_Time>
    </Approach_Locking_Area>
</Approach_Locking_Areas>

etree.ElementTree 读取上述xml文件,<Block_ID>的值全部为空
import xml.etree.ElementTree as ET
def walkData(root_node, level, result_list):   
    temp_list = [level, root_node.tag, root_node.attrib]
    result_list.append(temp_list) 
    print(result_list)   
    # 遍历每个子节点
    children_node = list(root_node)    
    if len(children_node) == 0:
        return
    # print(children_node)
    for child in children_node:
        walkData(child, level + 1, result_list)
        
        # breakpoint()
       # print(child)
   # print(result_list)
   # breakpoint()
    return
# 获得原始数据
def getXmlData(file_name):
    level = 1  # 节点的深度从1开始
    result_list = []
    root = ET.parse(file_name).getroot()
    # print(root)
    #     # print(r2)
    # breakpoint()
    walkData(root, level, result_list)
    return result_list
r2=getXmlData(name2)


运行结果如下:
[[1, 'Approach_Locking_Areas', {'Last_SyDB_Version_ID_Memorized': '0.0.0', 'Data_Familly': 'DF52'}], [2, 'Approach_Locking_Area', {'Name': 'ALS_S50103_Up', 'ID': '110'}], [3, 'Approach_Locking_Block_List', {}], [4, 'Block_ID', {}], [4, 'Block_ID', {}], [4, 'Block_ID', {}], [4, 'Block_ID', {}], [4, 'Block_ID', {}], [4, 'Block_ID', {}], [4, 'Block_ID', {}]]
  • 写回答

2条回答 默认 最新

  • CSDN专家-文盲老顾 2021-11-22 13:15
    关注

    你只读取了 attrib,没有读取 text

    
    def walkData(root_node, level, result_list):   
        temp_list = [level, root_node.tag, root_node.attrib]
        result_list.append(temp_list) 
        #if root_node.tag == 'Block_ID':
        #    print(list(root_node))
        # 遍历每个子节点
        children_node = list(root_node)    
        if len(children_node) == 0:
            temp_list[2] = root_node.text
            return
        # print(children_node)
        for child in children_node:
            walkData(child, level + 1, result_list)
            
            # breakpoint()
           # print(child)
       # print(result_list)
       # breakpoint()
        return
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月30日
  • 已采纳回答 11月22日
  • 创建了问题 11月22日

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘