当前位置: 首页 > 编程日记 > 正文

python xml模块学习

xml打开方式

# xml有两种打开方式
# 1. 打开文件,读取XML内容
str_xml = open('xman.xml', 'r').read()
print(str_xml)# 将字符串解析成xml特殊对象,root代指xml文件的根节点
root = ET.XML(str_xml)    # 读取字符串,将字符串转为Element对象
print(root)# 2. 直接解析xml文件
tree = ET.parse("xman.xml")  # 直接从xml文件解析封装一个ElementTree对象
print(tree)# 以上一个是读取字符串,转换为Element对象,另一个是转换为ElementTree对象,这两个对象具体不同,请参考操作xml部分

获取XML标签

# 例如我现在有一个xml文件
<data test="xxx"><country name="Liechtenstein"><rank updated="yes">2</rank><year>2023</year><gdppc>141100</gdppc><neighbor direction="E" name="Austria" /><neighbor direction="W" name="Switzerland" /></country><country name="Singapore"><rank updated="yes">5</rank><year>2026</year><gdppc>59900</gdppc><neighbor direction="N" name="Malaysia" /></country><country name="Panama"><rank updated="yes">69</rank><year>2026</year><gdppc>13600</gdppc><neighbor direction="W" name="Costa Rica" /><neighbor direction="E" name="Colombia" /></country>
</data>
# 获取xml文件的根节点
root1 = tree.getroot()  # 获取根节点,同样这里root1为Element对象
print(root1)# 获取标签名
s = root.tag  
print(s)==> data # 仅仅只会获取最顶层的标签名# 所以,我们可以迭代获取子标签名
# 这里清楚概念,root是一个Element对象,它迭代的每一个都是Element对象
# 是可以使用同样的tag等方法的
for i in root:  # 可迭代的方式获取子标签名print(i.tag) # 获取下一级的标签名==>
country
country
country# 获取标签属性
s = root.attrib  # 获取标签属性
print(s)==>
{'test': 'xxx'}for i in root:  # 可迭代的方式获取子标签名print(i.attrib)  # 获取下一级的标签属性==>
{'name': 'Liechtenstein'}
{'name': 'Singapore'}
{'name': 'Panama'}# 获取标签内容
s = root.text  # 获取标签内容
print(s) ==>  # 空,一级标签下包含的其它标签不算是内容for i in root:  # 可迭代的方式获取子标签名for j in i:print(j.text)  # 获取下一级的标签内容

操作XML并写入文件

# 开头我们说了,有两种打开方式打开xml这里我们就分别用两种方式,再次演示,具体Element与ElementTree对象不同############ 解析方式一 ############
# 读取字符串# 打开文件,读取XML内容
str_xml = open('xman.xml', 'r').read()# 将字符串解析成xml特殊对象,root代指xml文件的根节点
root = ET.XML(str_xml)   # 读入字符串############ 操作 ############# 顶级标签
print(root.tag)# 循环所有的year节点
# iter方法:在当前节点的子孙中,根据节点名称寻找所有指定的节点,并返回一个迭代器(可以被for循环)
for node in root.iter('year'):# 将year节点中的内容自增1new_year = int(node.text) + 1node.text = str(new_year)# 设置属性(没有添加,有修改)node.set('name', 'alex')node.set('age', '18')# 删除属性del node.attrib['name']  # 删除name属性############ 保存文件 ############
tree = ET.ElementTree(root)
tree.write("xml_t2.xml", encoding='utf-8')
############ 解析方式二 ############# 直接解析xml文件
tree = ET.parse("xman.xml")# 获取xml文件的根节点
root = tree.getroot()   # 这里会生成一个ElementTree对象############ 操作 ############# 顶层标签
print(root.tag)# 循环所有的year节点
for node in root.iter('year'):# 将year节点中的内容自增一new_year = int(node.text) + 1node.text = str(new_year)# 设置属性node.set('name', 'alex')node.set('age', '18')# 删除属性del node.attrib['name']############ 保存文件 ############
tree.write("xml_t2.xml", encoding='utf-8')

创建XML文件

# 创建xml文档# 创建根节点
root = ET.Element('famliy')# 创建节点大儿子 #
son1 = ET.Element('son', {'name':'儿1'})
# son1 = root.makeelement('son', {'name': '儿1'})  # 方法二
# son1 = ET.SubElement(root, "son", attrib={'name': '儿1'})  # 方法三# 创建节点小儿子 #
son2 = ET.Element('son', {'name':'儿2'})
# son2 = root.makeelement('son', {"name": '儿2'})  # 方法二
# son2 = ET.SubElement(root, "son", attrib={"name": "儿2"})   # 方法三# 在大儿子中创建两个孙子 #
grandson1 = ET.Element('grandson', {'name': '儿11'})
# grandson1 = son1.makeelement('grandson', {'name': '儿11'})  # 方法二
grandson2 = ET.Element('grandson', {'name': '儿12'})
# grandson2 = son1.makeelement('grandson', {'name': '儿12'})  # 方法二# 方法三
# grandson1 = ET.SubElement(son1, "age", attrib={'name': '儿11'})
# grandson1.text = '孙子'   # 可以操作标签内容# 将以上穿件孙子添加到儿子
son1.append(grandson1)
son2.append(grandson2)# 把儿子添加到根节点中
root.append(son1)
root.append(son2)# 生成写入一个xml
tree = ET.ElementTree(root)
tree.write('xml_t3.xml',encoding='utf-8',xml_declaration=True ,short_empty_elements=False)
# xml_declaration 设置为<?xml version='1.0' encoding='utf-8'?> xml注释
# short_empty_elements 自闭和的一个参数,如果便签没有text,则 自闭和 没有</xxx>

转载于:https://www.cnblogs.com/coolking/p/5612442.html

相关文章:

实例 - 购物车 (列表、循环)

salary int(input(Please input your money:))product [(iphone6s,5800),(mac bood,9000),(coffee,32),(python book,80),(bicyle,1500), ]shopping []while True:#打印商品内容n 1for i,v in product:print(n,.,i,v)n 1#引导用户选择商品choice input(选择购买商品编号:…

右滑手势导航返回的相关设置

iOS7之后提供了右滑返回上一级界面的手势&#xff0c;但是自定义返回按钮会失效&#xff0c;解决办法如下&#xff1a; -(void)viewWillAppear:(BOOL)animated{ [superviewWillAppear:animated]; if([self.navigationController respondsToSelector:selector(interacti…

区块链编程完全指南:平台、语言与结论

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 区块链&#xff0c;代表着未来的发展方向。是的&#xff0c;在文章开头&#xff0c;我们首先给出这样的结论。当然&#xff0c;认定未来将围…

基于QProbe创建基本Android图像处理框架

先来看一个GIF 这个GIF中有以下几个值得注意的地方这个界面是基本的主要界面所应该在的地方。其右下角有一个“”号&#xff0c;点击后&#xff0c;打开图像采集界面在这个界面最上面的地方&#xff0c;显示的是当前图像处理的状态。&#xff08;一般来说&#xff0c;是成功/不…

iOS三种拨打电话的方法

1&#xff0c;这种方法&#xff0c;拨打完电话回不到原来的应用&#xff0c;会停留在通讯录里&#xff0c;而且是直接拨打&#xff0c;不弹出提示NSMutableString* str[[ NSMutableStringalloc ] initWithFormat : "tel:%" , "xxxxxxxxxxx" ];[[UIApplica…

查询今天是周几?

<?php $wdate(w); $weekarray( "0">"星期日", "1">"星期一", "2">"星期二", "3">"星期三", "4">"星期四", "5">"星期五",…

区块链学习之-发布合约

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 命令行编译&#xff0c;发布合约1. 编译合约&#xff0c;编译不了curl --data ‘{“jsonrpc”:“2.0”,“method”: “eth_compileSolidi…

Codeforces 900D Unusual Sequences:记忆化搜索

题目链接&#xff1a;http://codeforces.com/problemset/problem/900/D 题意&#xff1a; 给定x,y&#xff0c;问你有多少个数列a满足gcd(a[i]) x 且 ∑(a[i]) y。 题解&#xff1a; 由于gcd(a[i]) x&#xff0c;所以y一定是x的倍数&#xff0c;否则无解。 那么原题就等价于…

对AFNetworking的简单封装

#import "YGLoadDataManager.h"#import "AFNetworking.h"implementation YGLoadDataManager#pragma mark -- GET请求 -- (void)getWithURLString:(NSString *)URLStringparameters:(id)parameterssuccess:(void (^)(id))successfailure:(void (^)(NSError …

js原型链prototype与__proto__以及new表达式

对象模型的细节 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Details_of_the_Object_Model转载于:https://www.cnblogs.com/imust2008/p/5621751.html

公有链和联盟链的本质不同

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 区块链是生命体、经济体。未来的区块链世界离不开自己的价值尺度建设 公有链和联盟链的本质不同 区块链受到大家广泛关注应该是2015年10月…

C++ 重载运算符简单举例

我们可以重定义或重载大部分 C 内置的运算符。这样&#xff0c;就能使用自定义类型的运算符。 重载的运算符是带有特殊名称的函数&#xff0c;函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样&#xff0c;重载运算符有一个返回类型和一个参数列表。…

ApacheBench(ab)使用详解

ab命令原理 Apache的ab命令模拟多线程并发请求&#xff0c;测试服务器负载压力&#xff0c;也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。 ab命令对发出负载的计算机要求很低&#xff0c;既不会占用很多CPU&#xff0c;也不会占用太多的内存&#xff0c;但却会给目…

ios如何实现静音模式下声音仍然可以外放

AVAudioSession *audioSession [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

创建数据目录及多节点目录

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 创建数据目录及多节点目录 mkdir -p ~/workmeta/EduEthereumServerDeploy/deploy_2/{node1,node2} > cd ~/workmeta/EduEthereumServerD…

卷积神经网络学习笔记与心得(4)池化

图片经过卷积、激活后的结果一般带有大量原图信息。 上图中卷积核提取的是竖直方向上的连续像素&#xff0c;但是&#xff0c;被增强的像素只占了结果的1/3&#xff0c;对于多层网络&#xff0c;其余重要性较低的信息也被传入了下一层网络&#xff0c;造成了不必要的浪费&#…

mina、netty消息边界问题(采用换行符)

在TCP连接开始到结束连接&#xff0c;之间可能会多次传输数据&#xff0c;也就是服务器和客户端之间可能会在连接过程中互相传输多条消息。理想状况是一方每发送一条消息&#xff0c;另一方就立即接收到一条&#xff0c;也就是一次write对应一次read。但是&#xff0c;现实不总…

关于延时操作的使用

延时操作主要有4种方式 1.sleep方式 [NSThread sleepForTimeInterval:1.0f]; [self delayMethod]; 使用sleep方式在主线程和子线程中均可执行,但是这是中阻塞线程的方式,所以建议放到子线程中使用,以免卡住主线程使界面卡住. 没有发现取消执行的方法. 2.NSTimer定时器方式 …

CGpoint,CGSize,CGRect,NSRange

NSRange (范围);(location,位置 length&#xff0c;长度; NSPoint /CGpoint&#xff08;点&#xff09;; NSSize /CGSize&#xff08;大小&#xff09; CGPoint p1 CGPointZero CGPointMake(0, 0)代表原点 CGSizeZero CGSizeMake(0, 0);代表大小为0 CGRect rec CGRectMake…

Linux之socket套接字编程20160704

介绍套接字之前&#xff0c;我们先看一下传输层的协议TCP与UDP&#xff1a; TCP协议与UDP协议的区别 首先咱们弄清楚&#xff0c;TCP协议和UCP协议与TCP/IP协议的联系&#xff0c;很多人犯糊涂了&#xff0c;一直都是说TCP/IP协议与UDP协议的 区别&#xff0c;我觉得这是没有从…

WebViewJavascriptBridge的简单使用

- (void)viewDidLoad { UIWebView* webView [[UIWebView alloc] initWithFrame:self.view.bounds]; webView.backgroundColor [UIColor whiteColor]; [self.view addSubview:webView]; // 打开输出日志[WebViewJavascriptBridge enableLogging]; // 设置关联…

区块链架构详解

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 准备工作 区块链不是一种技术实现&#xff0c;而是一个系统的架构设计&#xff0c;使用一系列的技术组合用于完成去中心化的数据存储。比特…

Git详解之九 Git内部原理

以下内容转载自&#xff1a;http://www.open-open.com/lib/view/open1328070620202.html Git 内部原理 不管你是从前面的章节直接跳到了本章&#xff0c;还是读完了其余各章一直到这&#xff0c;你都将在本章见识 Git 的内部工作原理和实现方式。我个人发现学习这些内容对于理解…

Hadoop2.6.0伪分布环境搭建

用到的软件&#xff1a; 一、安装jdk&#xff1a; 1、要安装的jdk&#xff0c;我把它拷在了共享文件夹里面。 &#xff08;用优盘拷也可以&#xff09; 2、我把jdk拷在了用户文件夹下面。 &#xff08;其他地方也可以&#xff0c;不过路径要相应改变&#xff09; 3、执行复制安…

ios 设置tableview左滑删除按钮的相关属性

自定义cell时在layoutSubviews处理 - (void)layoutSubviews { [super layoutSubviews]; [self dealDeleteButton]; } - (void)dealDeleteButton{ for (UIView *subView in self.subviews) { if ([subView isKindOfClass:NSClassFromString("…

区块链基础:理论和术语

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 一、区块链&#xff1a; 1.百度百科上对区块链的定义是&#xff1a;区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机 技…

Python Socket编程基础篇

Socket网络编程 socket通常也称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix&#xff0c;而Unix/Linux基本哲学之一就是“一切皆文…

redis使用epoll

redis使用epoll的代码在ae_epoll.c文件中。 epoll_create&#xff1a;redis服务器在启动时&#xff0c;创建事件循环&#xff0c;调用epoll_create方法创建epoll实例。 static int aeApiCreate(aeEventLoop *eventLoop) {aeApiState *state zmalloc(sizeof(aeApiState));if (!…

贝塞尔结合CAShapeLayer绘制路线,CABasicAnimation实现的小动画

最近项目需求,做的一个标识正在直播的小动画,代码如下: #import "YGIsOnLiveAnmationView.h" interface YGIsOnLiveAnmationView () property (strong, nonatomic) CAShapeLayer * progressLayer; property (strong, nonatomic) CAShapeLayer * triangleLayer; p…

区块链和可持续性

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 区块链和可持续性 在区块链算法和区块链平台方面&#xff0c;可持续性可以有多种解释。一方面&#xff0c;任何听说过比特币网络能源需求的…