• Python21天学习挑战赛Day(5-6)·python操作xml文件(应用)



    活动地址:CSDN21天学习挑战赛

    学习日志3——

    1.xml文件格式

    ·声明        ·根元素        ·子元素        ​​​​​​​·属性        ​​​​​​​·命名空间        ​​​​​​​·限定名

            xml可以有声明也可以没有,若有,则在第一行

    
    

    version:正在使用的xml标准版本;

    encoding:在此文件中使用的字符编码类型;

    standalone:告诉解析器是否要外部信息来解析xml文件;

    2.python解析xml文件

            新建一个样例xml文件

    1. <collection shelf="New Arrivals">
    2. <class className="1班">
    3. <code>2022001code>
    4. <number>10number>
    5. <teacher>小白teacher>
    6. class>
    7. <class className="2班">
    8. <code>2022002code>
    9. <number>20number>
    10. <teacher>小红teacher>
    11. class>
    12. <class className="3班">
    13. <code>2022003code>
    14. <number>30number>
    15. <teacher>小黑teacher>
    16. class>
    17. collection>

            2.1ElementTree方式

             解析代码——

    1. import xml.etree.ElementTree as ET
    2. tree = ET.ElementTree(file='1.xml')
    3. print(type(tree))
    4. root = tree.getroot() # root是根元素
    5. print(type(root))
    6. print(root.tag)
    7. for index, child in enumerate(root):
    8. print("第%s个%s元素,属性:%s" % (index, child.tag, child.attrib))
    9. for i, child_child in enumerate(child):
    10. print("标签:%s,内容:%s" % (child_child.tag, child_child.text))
    11. #输出
    12. <class 'xml.etree.ElementTree.ElementTree'>
    13. <class 'xml.etree.ElementTree.Element'>
    14. collection
    15. 0class元素,属性:{'className': '1班'}
    16. 标签:code,内容:2022001
    17. 标签:number,内容:10
    18. 标签:teacher,内容:小白
    19. 1class元素,属性:{'className': '2班'}
    20. 标签:code,内容:2022002
    21. 标签:number,内容:20
    22. 标签:teacher,内容:小红
    23. 2class元素,属性:{'className': '3班'}
    24. 标签:code,内容:2022003
    25. 标签:number,内容:30
    26. 标签:teacher,内容:小黑

            2.2DOM方式

    1. from xml.dom.minidom import parse
    2. # 读取文件
    3. dom = parse('1.xml')
    4. # 获取文档元素对象
    5. elem = dom.documentElement
    6. # 获取 class
    7. class_list_obj = elem.getElementsByTagName('class')
    8. print(class_list_obj)
    9. print(type(class_list_obj))
    10. for class_element in class_list_obj:
    11. # 获取标签中内容
    12. code = class_element.getElementsByTagName('code')[0].childNodes[0].nodeValue
    13. number = class_element.getElementsByTagName('number')[0].childNodes[0].nodeValue
    14. teacher = class_element.getElementsByTagName('teacher')[0].childNodes[0].nodeValue
    15. print('code:', code, ', number:', number, ', teacher:', teacher)
    16. #输出
    17. [class at 0x20141bc5c10>, class at 0x20141bdf940>, class at 0x20141bdfb80>]
    18. <class 'xml.dom.minicompat.NodeList'>
    19. code: 2022001 , number: 10 , teacher: 小白
    20. code: 2022002 , number: 20 , teacher: 小红
    21. code: 2022003 , number: 30 , teacher: 小黑

    3.python写入xml文件

             3.1案例:21班师生情况表

    1. import xml.dom.minidom
    2. # 1、在内存中创建一个空的文档
    3. doc = xml.dom.minidom.Document()
    4. # 2、创建根元素
    5. root = doc.createElement('school')
    6. # print('添加的xml标签为:',root.tagName)
    7. # 3、设置根元素的属性
    8. root.setAttribute('type', 'type')
    9. # 4、将根节点添加到文档对象中
    10. doc.appendChild(root)
    11. # 5、创建子元素
    12. book = doc.createElement('teachers')
    13. # 6、添加注释
    14. book.appendChild(doc.createComment('这是一条注释'))
    15. # 7、设置子元素的属性
    16. book.setAttribute('teach', 'occupation')
    17. # 8、子元素中嵌套子元素,并添加文本节点
    18. name = doc.createElement('name')
    19. name.appendChild(doc.createTextNode('Mr.Wang'))
    20. price = doc.createElement('教学时间')
    21. price.appendChild(doc.createTextNode('12years'))
    22. number = doc.createElement('time left for teaching')
    23. number.appendChild(doc.createTextNode('15years'))
    24. # 9、将子元素添加到boot节点中
    25. book.appendChild(name)
    26. book.appendChild(price)
    27. book.appendChild(number)
    28. # 10、将book节点添加到root根元素中
    29. root.appendChild(book)
    30. # 创建子元素
    31. book = doc.createElement('students')
    32. # 设置子元素的属性
    33. book.setAttribute('class', '21')
    34. # 子元素中嵌套子元素,并添加文本节点
    35. name = doc.createElement('numbers')
    36. name.appendChild(doc.createTextNode('30'))
    37. price = doc.createElement('grades')
    38. price.appendChild(doc.createTextNode('always be good'))
    39. number = doc.createElement('time for graduation')
    40. number.appendChild(doc.createTextNode('7.23.2025'))
    41. # 将子元素添加到boot节点中
    42. book.appendChild(name)
    43. book.appendChild(price)
    44. book.appendChild(number)
    45. # 将book节点添加到root根元素中
    46. root.appendChild(book)
    47. print(root.toxml())
    48. fp = open('./21班情况.xml', 'w', encoding='utf-8') # 需要指定utf-8的文件编码格式,不然notepad中显示十六进制
    49. doc.writexml(fp, indent='', addindent='\t', newl='\n', encoding='utf-8')
    50. fp.close()

            文件结果——

     

  • 相关阅读:
    贪吃蛇小游戏代码
    .NET Core 企业微信消息推送
    如何在macbook上删除文件?Mac删除文件的多种方法
    Stable Diffusion 本地部署教程
    Qt富文本处理
    Java开发学习(四十五)----MyBatisPlus查询语句之映射匹配兼容性
    Xray联动RAD实现自动扫描教程
    Redis学习笔记15:基于spring data redis及lua脚本发送到redis服务器多久过期
    常用类学习(数字类、随机数、枚举详解)
    【开源教程27】疯壳·开源编队无人机-视觉追踪
  • 原文地址:https://blog.csdn.net/weixin_62599885/article/details/126200372