当前位置:首页 > Web开发 > 正文

105.格局化文件xml与json

2024-03-31 Web开发

标签:

布局化文件存储

目的是为了解决文件在差此外系统中的交换

两种协议xml,json

xml偏重于描述数据自己,即数据的布局和语义

html偏重于如何显示web页面的数据

网页三剑客

html 网页中有什么数据

css 网页美化

javascript 页面成果

xml参考资料

https://www.runoob.com/xml/xml-syntax.html

https://blog.csdn.net/seetheworld518/article/details/49535285

json参考资料

https://www.runoob.com/json/json-tutorial.html

https://www.w3school.com.cn/json/index.asp

xml

可扩展的符号语言(eXtensible Markup Language),是w3c组织指定的标准,比html更简单一些

符号语言:语言中使用<>括取来的文本字符串作为符号

可扩展:用户可以本身界说需要的符号,html不行

xml文档的组成

措置惩罚惩罚指令(可以认为一个文件内只有一个措置惩罚惩罚指令)

最多只有一行

必需在第一行

与xml自己措置惩罚惩罚相关的一些生命和指令

以?xml开头

一般用于声明xml的版本和给与的编码

version属性是必需的

encoding属性用来指出xml解释器使用的编码

根元素(一个文件内只有一个根元素)
-在xml文件中,可以把他看做是一个树形布局

有切只能有一个

子元素
-根元素下所有的元素,都是子元素

属性

供给有关元素的特别信息

凡是供给不属于数据构成部分的信息

值必需使用引号,单引号双引号都行,内容中有单引号,就使用双引号,,反之亦然

内容

注释

其说明摆布的信息

注释不能在标签内

注释内不成以有一个以上的短横线

保存字符

<?xml version="1.0" encoding="utf-8"?> <note> <xsq> <name>显示器</name> <date>2018/01/01</date> </xsq> <sb> <name>鼠标</name> <date>2019/01/01</date> </sb> <jp> <name>键盘</name> <date>2020/01/01</date> </jp> </note> xml访谒 读取

分为两个主要技术 SAX 和 DOM

SAX

基于事件驱动

用SAX解析文档涉及到解析器和事件措置惩罚惩罚器

特点:

流式读取

DOM

是W3C规定的XML编程接口,保举

读取一个xml文件,以属性布局生存到缓存中

用途

定位浏览xml任何一个节点的信息

添加删除相应的内容

minidom和etree

minidom

minidom.parse(filename):加载读取的xml文件,也可以是xml代码

.documentElement:获取xml文档东西,一个xml文件只有一个对应的文档东西

.getAttribute(attr_name):获取xml节点属性 attr_name属性名

.getElementByTagName(tage_name):得到一个节点东西的调集 tage_name节点名

.childNodes:得到所有子节点的列表

.childNodes[index].nodeValue:获得单个节点的值

.firstNode:获得第一个节点,等价于.childNodes[0]

.attributes[tage_name]

import xml.dom.minidom from xml.dom.minidom import parse #读取文件形成树文件 DOMtree = xml.dom.minidom.parse("./t.xml") #通过树文件,实例根节点 doc = DOMtree.documentElement print(list(doc.childNodes)) #遍历根节点的子节点 for i in doc.childNodes: #便当子节点的子节点 for n in i.childNodes: if n.nodeName == "name": print(n.childNodes[0].data) if n.nodeName == "date": print(n.childNodes[0].data)

etree

.getiterator 得到相应可迭代的node调集

.lite 同上

.find(node_name) 查找置顶名字的节点。返回一个node

.findall(node_name) 返回多个node_name的节点

.tag 节点名

.text 节点文本

.attrib node属性的字典类型内容

import xml.etree.ElementTree root = xml.etree.ElementTree.parse("./t.xml") #操作getiterator访谒 nodes = root.getiterator() for node in nodes: print("{0}--{1}".format(node.tag, node.text)) print("-" * 30) #操作find和findall要领访谒 jpm = root.find("jp") print("{0}--{1}".format(jpm.tag, jpm.text)) print("-" * 30) l = root.findall("jp") for i in l: print("{0}--{1}".format(i.tag, i.text)) for n in i.iter(): if n.tag == "name": f "other" in n.attrib.keys(): print(n.attrib["other"])

创建xml文件

变动方法

ele.set:变动属性

ele.append:添加子元素

ele.remove:删除元素

第一种方法

import xml.etree.ElementTree as ET note = ET.Element("note") name = ET.Element("name", {"a":"A"}) date = ET.Element("date", {"b":"B"}) note.append(name) note.append(date) t = ET.ElementTree(note) t.write('family_tree.xml', encoding='utf-8', short_empty_elements=False, xml_declaration=True)

第二种方法

import xml.etree.ElementTree as ET note = ET.Element("note") name = note.makeelement("name", {"a":"A"}) date = note.makeelement("date", {"b":"B"}) note.append(name) note.append(date) t = ET.ElementTree(note) t.write('family_tree.xml', encoding='utf-8', short_empty_elements=False, xml_declaration=True)

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/29994.html