zoukankan      html  css  js  c++  java
  • python 写 XML 文件

    思想:

    • 创建根节点
    • 创建子节点
    • 将子节点挂靠到根节点上(嵌套时就重复这三步)

    python 代码:

     1 ### 参考链接:https://blog.csdn.net/qq_37174526/article/details/89489212
     2 from xml.dom import minidom
     3 
     4 # 参数:xml_save_path、filename(文件名称)、filepath(文件绝对路径)、
     5 def writeXML(xml_save_path):  
     6     # 1.创建 DOM 树对象
     7     dom = minidom.Document()
     8     # 2.创建根节点。每次都要用DOM对象来创建任何节点。
     9     root_node = dom.createElement('annotation')
    10     # 3.用 DOM 对象添加根节点
    11     dom.appendChild(root_node)
    12     
    13     ## folder 子节点
    14     folder_node = dom.createElement('folder')  # 创建子节点
    15     root_node.appendChild(folder_node)         # 将创建的子节点挂到根节点上
    16     folder_text = dom.createTextNode('lyj')    # 创建文本节点
    17     folder_node.appendChild(folder_text)       # 将创建的文本节点挂到子节点上
    18     
    19     ## filename 子节点, 需要传进参数 filename
    20     filename_node = dom.createElement('filename')
    21     root_node.appendChild(filename_node)         
    22     filename_text = dom.createTextNode('文件名称')
    23     filename_node.appendChild(filename_text)
    24 
    25     ## filepath 子节点, 需要传进参数 filepath
    26     filepath_node = dom.createElement('filepath') 
    27     root_node.appendChild(filepath_node)          
    28     filepath_text = dom.createTextNode('文件绝对路径') 
    29     filepath_node.appendChild(filepath_text)       
    30 
    31     ## size 子节点,需要传进参数 w、h、c
    32     size_node = dom.createElement('size')
    33     root_node.appendChild(size_node)
    34 
    35     width_node = dom.createElement('width')
    36     size_node.appendChild(width_node)
    37     width_text = dom.createTextNode('图宽')
    38     width_node.appendChild(width_text)
    39 
    40     height_node = dom.createElement('height')
    41     size_node.appendChild(height_node)
    42     height_text = dom.createTextNode('图高')
    43     height_node.appendChild(height_text)
    44 
    45     depth_node = dom.createElement('depth')
    46     size_node.appendChild(depth_node)
    47     depth_text = dom.createTextNode('通道数')
    48     depth_node.appendChild(depth_text)
    49 
    50     ### 创建 object 节点
    51     for i in range(1):
    52         object_node = dom.createElement('object')
    53         root_node.appendChild(object_node)
    54 
    55         name_node = dom.createElement('name')
    56         object_node.appendChild(name_node)
    57         name_text = dom.createTextNode('类别名称')
    58         name_node.appendChild(name_text)
    59 
    60         bndbox_node = dom.createElement('bndbox')
    61         object_node.appendChild(bndbox_node)
    62 
    63         xmin_node = dom.createElement('xmin')
    64         bndbox_node.appendChild(xmin_node)
    65         xmin_text = dom.createTextNode('x_min')
    66         xmin_node.appendChild(xmin_text)
    67 
    68         ymin_node = dom.createElement('ymin')
    69         bndbox_node.appendChild(ymin_node)
    70         ymin_text = dom.createTextNode('y_min')
    71         ymin_node.appendChild(ymin_text)
    72 
    73         xmax_node = dom.createElement('xmax')
    74         bndbox_node.appendChild(xmax_node)
    75         xmax_text = dom.createTextNode('x_max')
    76         xmax_node.appendChild(xmax_text)
    77 
    78         ymax_node = dom.createElement('ymax')
    79         bndbox_node.appendChild(ymax_node)
    80         ymax_text = dom.createTextNode('y_max')
    81         ymax_node.appendChild(ymax_text)
    82 
    83 
    84     # 每一个结点对象(包括dom对象本身)都有输出XML内容的方法,如:toxml()--字符串, toprettyxml()--美化树形格式。
    85     
    86     try:
    87         with open(xml_save_path,'w',encoding='UTF-8') as fh:
    88             # 4.writexml()第一个参数是目标文件对象,第二个参数是根节点的缩进格式,第三个参数是其他子节点的缩进格式,
    89             # 第四个参数制定了换行格式,第五个参数制定了xml内容的编码。
    90             dom.writexml(fh,indent='',addindent='	',newl='
    ',encoding='UTF-8')
    91             print('OK, xml 文件创建成功。')
    92     except Exception as err:
    93         print('错误:{err}'.format(err=err))
    94 
    95 if __name__ == '__main__':
    96     xml_save_path = '/home/aistudio/myxml2.xml'
    97     writeXML(xml_save_path)

    创建结果展示:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <annotation>
     3     <folder>lyj</folder>
     4     <filename>文件名称</filename>
     5     <filepath>文件绝对路径</filepath>
     6     <size>
     7         <width>图宽</width>
     8         <height>图高</height>
     9         <depth>通道数</depth>
    10     </size>
    11     <object>
    12         <name>类别名称</name>
    13         <bndbox>
    14             <xmin>x_min</xmin>
    15             <ymin>y_min</ymin>
    16             <xmax>x_max</xmax>
    17             <ymax>y_max</ymax>
    18         </bndbox>
    19     </object>
    20 </annotation>
  • 相关阅读:
    Servant:基于Web的IIS管理工具
    mono-3.4.0 源码安装时出现的问题 [do-install] Error 2 [install-pcl-targets] Error 1 解决方法
    使用 OWIN Self-Host ASP.NET Web API 2
    Xamarin和微软发起.NET基金会
    SQLite vs MySQL vs PostgreSQL:关系型数据库比较
    Mono 3.2.7发布,JIT和GC进一步改进
    如何使用Microsoft技术栈
    c#开源消息队列中间件EQueue 教程
    通过一组RESTful API暴露CQRS系统功能
    NEsper Nuget包
  • 原文地址:https://www.cnblogs.com/lyj0123/p/13838403.html
Copyright © 2011-2022 走看看