栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python-xml基础-学习日志-CSDN21天学习挑战赛(五)-更多学习请期待下期

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-xml基础-学习日志-CSDN21天学习挑战赛(五)-更多学习请期待下期


目录

XML简单学习与使用

一、xml概述

1.概念:

2.功能特点:

二、xml文档格式

1.首行声明:

 2.完整xml文件如下:

 三、Python解析xml文件

 1.ElementTree方式

2.DOM方式

四、Python的xml相关操作 

 1.Python写入xml

2.Python更新(插入)xml

3.xml转json


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

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…

XML简单学习与使用

一、xml概述

1.概念:

XML 指可扩展标记语言(eXtensible Markup Language,简称:XML)是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。

2.功能特点:

XML 和 HTML 为不同的目的而设计:

  • XML 被设计用来传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息,而 XML 旨在传输信息。

        说人话,这是用来存东西的盒子。

        特点作用语法简述:

# 0.标签自定义,配置、传输文件数据,存储数据。
# 1. ".xml"为文件后缀
# 2.首行声明,根标签只有一个。
# 3.所有标签得正确关闭、区分大小写。
# 4.标签名称不能以数字、标点符号和xml开始,不能包含空格
# (语法与HTML相似)

二、xml文档格式

1.首行声明:

        分为三部分,如下所示:



 2.完整xml文件如下:







    
        
        杀第力
        xiaoloin
        41
        hainan
        boy
    
    
        百人王
        王之柱
        20
        广西
        
        
            pading
        
    
    
        无上之邸
        白帝
        20
        广东
        
    

 三、Python解析xml文件

        这里引用上面的xml做如下测试

 1.ElementTree方式
tree0 = ET.ElementTree(file='banding.xml') # 加载文档
a = tree0.getroot()   # 获取根元素对象
print(a)
print(a.tag)  # 获取根标签名
print(a.attrib)  # 获取根根标签的属性,以字典形式返回
for i in a:
    print(i.tag,i.attrib)
    # 遍历子元素(标签)(一级)
    # 获取根元素对象下的每一个元素的每一个标签名和标签属性

print('****'*15)
print(a[1].tag,a[1].attrib)  # 特定索引值访问子元素
print('----')

# 深度遍历:
# 1.全遍历--遍历某个元素之下的所有子元素
for i in a.iter():
    print(i.tag,i.attrib,i.text)
# 2.定向遍历
print('-----')
for i in a.iter(tag='name'):
    print(i.tag,i.text)

print('-----')
# 3.路径式遍历查找(XPath)
for i in a.iterfind('school/name'):
    print(i.tag,i.text)


print('----')
# 4.查找具备某个name属性具备特定属性值的标签,name元素
for i in a.iterfind('school[@name="部署一"]'):
    print(i.tag, i.text)

print('------')

2.DOM方式
# coding=gbk
from xml.dom.minidom import parse

# 读取文件
word_text = parse('banding.xml')
# 获取文档元素对象
elem = word_text.documentElement
# 获取 school
school_list_obj = elem.getElementsByTagName('school')
print(school_list_obj)
print(type(school_list_obj))
print("*-"*20)
for school_element in school_list_obj:
    # 获取school标签中的内容
    age = school_element.getElementsByTagName('age')[0].childNodes[0].nodeValue
    city = school_element.getElementsByTagName('city')[0].childNodes[0].nodeValue
    sex = school_element.getElementsByTagName('sex')[0].childNodes[0].nodeValue
    print('age:', age, ', city:',city, ', sex:', sex)

输出内容为:

[, , ]

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
age: 41 , city: hainan , sex: boy
age: 20 , city: 广西 , sex: 男
age: 20 , city: 广东 , sex: 男

四、Python的xml相关操作 

 1.Python写入xml
# coding=gbk
# 这是避免程序故障的字段,没什么故障的话直接忽略即可

import xml.dom.minidom

# 1、创建空文档
text_0 = xml.dom.minidom.Document()

# 2、创建根元素并设置属性,再写入文档
stack = text_0.createElement('countries ')
stack.setAttribute('library', 'beijin')
text_0.appendChild(stack)

# 3、创建子元素并设置属性
map = text_0.createElement('map')
map.setAttribute('国家', '中国')

# 4、添加注释
stack.appendChild(text_0.createComment('这是根元素注释'))
map.appendChild(text_0.createComment('这是子元素注释'))

# 5、设置子元素中的子元素(嵌套)
regin0 = text_0.createElement('address')
regin0.appendChild(text_0.createTextNode('地处亚洲东部'))
capital = text_0.createElement('首都')
capital.appendChild(text_0.createTextNode('北京'))
population = text_0.createElement('人口')
population.appendChild(text_0.createTextNode('4亿'))

# 6、将子元素逐一加入节点中
map.appendChild(regin0)
map.appendChild(capital)
map.appendChild(population)

# 7、添加第二个map节点
stack.appendChild(map)

# 创建子元素map+设置属性
map = text_0.createElement('map')
map.setAttribute('国家', '美国')

# 子元素的子元素添加与设置
regin0 = text_0.createElement('address')
regin0.appendChild(text_0.createTextNode('北美中部'))
capital = text_0.createElement('首都')
capital.appendChild(text_0.createTextNode('纽约'))
population = text_0.createElement('人口')
population.appendChild(text_0.createTextNode('1亿'))

#  写入map节点后再将map加入根节点中
map.appendChild(regin0)
map.appendChild(capital)
map.appendChild(population)
stack.appendChild(map)

# 输出写完的全部xml
print(stack.toxml())

# 创建并写入文件当中,编码必须指定utf-8格式(有中文,推荐调整为utf-8)(默认16进制)
with open('./世界地图范本.xml', 'w', encoding='utf-8') as book:
    text_0.writexml(book, indent='', addindent='t', newl='n', encoding='utf-8')

        编译器输出结果为:

C:Users14317AppDataLocalProgramsPythonPython310python.exe E:/Study/python/Knowlage-CSDN/XML/xml写入.py
地处亚洲东部<首都>北京<人口>4亿北美中部<首都>纽约<人口>1亿

进程已结束,退出代码0

        输出后xml文件内容为:



	
	
		
		地处亚洲东部
		<首都>北京
		<人口>4亿
	
	
		北美中部
		<首都>纽约
		<人口>1亿
	

2.Python更新(插入)xml
#coding=gbk
import xml.dom.minidom
from xml.dom.minidom import parse

# 文件路径
path_1 = './世界地图范本.xml'

# 拿到根节点
stack_Tree = parse(path_1)
stack_Node = stack_Tree.documentElement

# 建立空的文档(相当于中转站,起到暂存的作用)
text_1 = xml.dom.minidom.Document()


# 新建一个map()
map = text_1.createElement('map')
map.setAttribute('国家', '俄罗斯')

# map下的子元素的创建
address = text_1.createElement('address')
address.appendChild(text_1.createTextNode('亚洲上面'))
capital = text_1.createElement('首都')
capital.appendChild(text_1.createTextNode('莫斯科'))
population = text_1.createElement('人口')
population.appendChild(text_1.createTextNode('3亿'))

#  加入map节点
map.appendChild(address)
map.appendChild(capital)
map.appendChild(population)

# 获取文档中刚刚创建好的map
math_map = stack_Node.getElementsByTagName('map')[0]

# insertBefore方法  父节点.insertBefore(新节点,父节点中的子节点)
stack_Node.insertBefore(map, math_map)

# 在最后插入新建的map
stack_Node.appendChild(map)


print(stack_Node.toxml())
with open(path_1, 'w', encoding='utf-8') as fh:
    stack_Tree.writexml(fh, indent='', addindent='t', newl='', encoding='utf-8')

         插入后上面的“世界地图范本.xml”文件内容将变成:        

	
			
				
						
				地处亚洲东部		
				<首都>北京		
				<人口>4亿		
			
				
				北美中部		
				<首都>纽约		
				<人口>1亿		
			
			亚洲上面		<首都>莫斯科		<人口>3亿	

3.xml转json

        xml文件内容如下: 


	Java哥
	C哥
	Python哥

         python上的xml转json简易代码:

#coding:gbk
import json
import xmltodict

XML_PATH = 'xml转json.xml'  # xml文件的路径
# 阅读模式打开文件
with open(XML_PATH, 'r',encoding="utf-8") as f:
    # 创建新的json文件
    with open(XML_PATH[:-3] + 'json', 'w',encoding="utf-8") as newfile:
        # xml解析器,写入从xml文件上读出来的文件内容
        xml_json_c = xmltodict.parse(f.read())
        # json.dumps将解析出来的xml_json_c转为json格式并写入新文件中。
        newfile.write(json.dumps(xml_json_c, indent=10))



         输出后的json文件内容:

{
          "school": {
                    "@classname": "u6c55u804cu9662",
                    "student": [
                              {
                                        "@name": "01",
                                        "#text": "Javau54e5"
                              },
                              {
                                        "@name": "02",
                                        "#text": "Cu54e5"
                              },
                              {
                                        "@name": "03",
                                        "#text": "Pythonu54e5"
                              }
                    ]
          }
}

 6.json转xml

初始化的json文件如下:

{
  "Student01":{
    "name": "SYW",
    "major": "computer",
    "age": "18",
    "like": "read book"
  },
  "Student02": {
      "like": "play game",
      "age": "20"
  },
  "Student03": "I don't know."
}

 json转xml的Python代码如下:

# coding=gbk
import xmltodict
import json

JX_path = 'JSON_XML.json'  # json文件的路径
JW = ''
with open(JX_path, 'r',encoding="utf-8") as f:
    # 将json转换为Python字典
    dict0 = json.loads(f.read())
    with open(JX_path[:-4] + 'xml', 'w',encoding="utf-8") as new_file:
        # 将字典转换为xml文件格式后写入新xml文件
        new_file.write(xmltodict.unparse(dict0))

xml文件输出后如下: 


SYWcomputer18read bookplay game20I don't know.




    
        SYW
        computer
        18
        read book
    
    
        play game
        20
    
    I don't know.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1038430.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号