python解析xml文件

  • 什么是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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值