-
什么是xml文件
XML 是一种很像HTML的标记语言。
XML 的设计宗旨是传输数据,而不是显示数据。
XML 标签没有被预定义。所有的标签都要自定义。
HTML 旨在显示信息,而 XML 旨在传输信息。 -
xml文件包括:
-xml声明:写在行首,它定义 XML 的版本和所使用的编码
-根元素:一个文件必须有且只有一个根元素。即最外层的标签只能定义一个。
-子元素:根元素内部的元素称为子元素。
-属性:每一个元素都可以定义属性。属性通常提供元素的额外·信息。XML 属性必须加引号
-内容:表明标签中存储的文本信息。
-注释:<!-- 这是注释 -->
-
xml文件格式
<!-- 这是注释 根元素note中有四个子元素 -->
<?xml version="1.0" encoding="UTF-8"?>
<note date="这是属性">
<to>这是文本内容</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
- 使用DOM.mindom解析xml文件
domtree = xml.dom.mindom.parse(filename) //读取一个xml文件或xml代码返回dom对象
doc = domtree.documentElement; //获取dom对象的根节点
node.nodeType //获取节点的类型 1表示元素节点 3表示文本节点
node.getElementsByTagName(name) //根据标签名获取一个节点集合
node.childNodes //得到所有孩子节点
node.childNodes[index] //获取孩子集合中某个孩子节点
node.data //获取文本节点的内容
node.firstChild //获取节点的大孩子
node.getAttribute(name) //根据属性名称获取节点属性值
node.attributes //获取一个节点所有属性
node.nodeName //获取节点的名称 - 一个例子
创建一个student.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<student birday="2019年一月一日" love="小芳">
<name>王大饼</name>
<address>上海</address>
<sex>男</sex>
<like>唱歌</like>
<like time="一年" type="街舞" leave="大神级别">跳舞</like>
<like>游泳</like>
<like>健身</like>
<like>读书</like>
</student>
执行以下代码
#导入相关包
import xml.dom.minidom;
from xml.dom.minidom import parse;
#读取xml文件
domtree = xml.dom.minidom.parse('student.xml');
#获取xml文件的文档对象(也就是根节点)
doc = domtree.documentElement;
#获取根节点名称 类型 属性值
print('根节点名称:',doc.nodeName);
print('根节点类型',doc.nodeType);
print('根节点所有属性',doc.attributes);
print('根节点birday属性值',doc.getAttribute('birday'));
print('根节点love属性值',doc.getAttribute('love'));
#获取标签名为like的节点集合 打印所有节点内容
likelist = doc.getElementsByTagName('like');
for i in likelist:
print('名称',i.nodeName,'文本内容',i.firstChild.data);
#打印第一个like节点的所有属性
dance = doc.getElementsByTagName('like')[0];
data = dance.attributes;
print(type(data)) #返回一个NamedNodeMap类型对象 相当于一个无序列表
#获取根节点第一个孩子节点的名称 类型
print('根节点第一个孩子节点名称',doc.firstChild.nodeName);
print('根节点第一个孩子节点类型',doc.firstChild.nodeType);
#获取根节点所有孩子节点 打印出元素节点的名称
list = doc.childNodes;
for i in list:
if i.nodeType == 1:
print('节点名称',i.nodeName);
查看输出结果
根节点名称: student
根节点类型 1
根节点所有属性 <xml.dom.minidom.NamedNodeMap object at
0x000001E654BF9DC8>
根节点birday属性值 2019年一月一日
根节点love属性值 小芳
名称 like 文本内容 唱歌
名称 like 文本内容 跳舞
名称 like 文本内容 游泳
名称 like 文本内容 健身
名称 like 文本内容 读书
第一个like节点的所有属性
<class 'xml.dom.minidom.NamedNodeMap'>
根节点第一个孩子节点名称 #text
根节点第一个孩子节点类型 3
节点名称 name
节点名称 address
节点名称 sex
节点名称 like
节点名称 like
节点名称 like
节点名称 like
节点名称 like
Process finished with exit code 0