修改xml文件

news2024/10/7 18:26:13

一、前言

本节是修改xml;同样方法也可修改arxml文件;主要使用LET.Element创建节点;

二、知识点

 1、专门用于格式化处理xml文件使其具有层级分明的缩进函数

#专门用于格式化处理xml文件使其具有层级分明的缩进

def indent( elem, level=0):

    i = "\n" + level * "  "

    if len(elem):

        if not elem.text or not elem.text.strip():

            elem.text = i + "  "

        if not elem.tail or not elem.tail.strip():

            elem.tail = i

        for elem in elem:

            indent(elem, level + 1)

        if not elem.tail or not elem.tail.strip():

            elem.tail = i

    else:

        if level and (not elem.tail or not elem.tail.strip()):

            elem.tail = i

2、修改XML文件

#举例1:添加节点'country'

import lxml.etree as LET

tree = LET.parse('country_data.xml')

root = tree.getroot()

"""

country_ref = LET.Element("neighbor")

country_ref.attrib['name'] = 'china'

country =root.findall('country')

print(country)

country[0].append(country_ref)

indent(root)

tree.write("d:/myself/write_arxml/country_data.xml", xml_declaration=True, encoding='utf-8')

"""

#alt+shift+A  整段注销

3、修改节点rank文本值,添加属性

#举例2:修改节点rank文本值,添加属性

"""

for rank in root.iter('rank'):

    new_rank = int(rank.text) + 1

    rank.text = str(new_rank)

    rank.set('updated', 'yes')

tree.write('output.xml')

 """

4、删除节点

#举例3 删除节点

"""

for country in root.findall('country'):

    # using root.findall() to avoid removal during traversal

    rank = int(country.find('rank').text)

    if rank > 50:

        root.remove(country)

tree.write('output.xml')

 """

5、 构建 XML 文档

#知识点4:构建 XML 文档¶

""" a = LET.Element('a')

b = LET.SubElement(a, 'b')

c = LET.SubElement(a, 'c')

d = LET.SubElement(c, 'd')

LET.dump(a) #Writes an element tree or element structure to sys.stdout.

 """


三、实例 代码


import lxml.etree as LET
#专门用于格式化处理xml文件使其具有层级分明的缩进
def indent( elem, level=0):
    i = "\n" + level * "  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for elem in elem:
            indent(elem, level + 1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i
#alt+shift+A  整段注销
#可以通过从文件中读取来导入此数据:
tree = LET.parse('country_data.xml')
root = tree.getroot()
#可以迭代的子节点
""" for child in root:
    print(child.tag, child.attrib) """
#子级是可以嵌套的,我们可以通过索引访问特定的子级节点
""" print(root[0][2].text) """
#递归遍历其下的所有子树(包括子级,子级的子级,等等)

""" for neighbor in root.iter('neighbor'):
    print(neighbor.attrib) """
print("find:===============")
""" for neighbor in root.findall('neighbor'):
    #rank = country.find('rank').text
    #name = country.get('name')
    print(neighbor.attrib) """
    
    #print(name, rank)
""" for neighbor in root.xpath('country'):
    print(neighbor.attrib)
    test = neighbor.getparent().find('rank').text
    print(test) """
country_ref = LET.Element("neighbor")
country_ref.attrib['name'] = 'china'

country =root.findall('country')
print(country)
country[0].append(country_ref)
indent(root)
tree.write("d:/myself/write_arxml/country_data.xml", xml_declaration=True, encoding='utf-8')

四、运行代码后

五、测试用 xml文件

<?xml version='1.0' encoding='UTF-8'?>
<data>
  <country name="Liechtenstein">
    <rank>1</rank>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
  </country>
  <country name="Singapore">
    <rank>4</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
  </country>
  <country name="Panama">
    <rank>68</rank>
    <year>2011</year>
    <gdppc>13600</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
  </country>
</data>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机的全自动智能洗衣机控制系统Proteus仿真

资料编号&#xff1a;108 下面是相关功能视频演示&#xff1a; 108-基于51单片机的全自动智能洗衣机控制系统Proteus仿真&#xff08;仿真源码全套资料&#xff09;设计功能&#xff1a; 1、对水温实时显示 2、显示滚筒转速 3、显示运行倒计时 4、能通过按钮分别设置洗涤时间…

一文带你深入理解【Java基础】· 常用类(上)字符串相关类

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

[附源码]java毕业设计社区私家车位共享收费系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于51单片机的八路电压表采集Proteus仿真

资料编号&#xff1a;110 下面是相关功能视频演示&#xff1a; 110-基于51单片机的八路电压表采集Proteus仿真&#xff08;源码仿真原理图全套资料&#xff09;功能如下&#xff1a; 利用单片机及其外围器件&#xff08;A/D转换器等&#xff09;实现一款简易电压表&#xff0…

(免费分享)基于springboot医药进销存系统

源码获取&#xff1a;关注文末gongzhonghao&#xff0c;输入014领取下载链接 开发工具&#xff1a;IDEA,数据库mysql 技术&#xff1a;springbootmybatis 系统主要分两个角色&#xff0c;客户和员工 package cn.tedu.drug.controller;import java.io…

【Pytorch with fastai】第 18 章 :使用 CAM 进行 CNN 解释

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Design a Facebook NewsFeed

title: Notes of System Design No.06 — Design a Facebook’s Newsfeed description: Design a Facebook’s Newsfeed ’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is News Feed? 01.Functional Requirement 02. Non-Functional Requireme…

面试刷题---计算机网络部分(一)

1 请描述 TCP/IP 协议中主机与主机之间通信的三要素 答&#xff1a; IP 地址&#xff08;IP address&#xff09; 子网掩码&#xff08;subnet mask&#xff09; IP 路由&#xff08;IP router&#xff09; 扩展&#xff1a; TCP/IP定义&#xff1a;TCP/IP是基于TCP和IP这两个…

iHRM 人力资源管理系统_第11章_刷脸登录

iHRM 人力资源管理系统_第11章_刷脸登录 文章目录iHRM 人力资源管理系统_第11章_刷脸登录第11章 刷脸登录1 浅谈人工智能1.1 人工智能的概述1.2 人工智能的应用领域1.3 基于人工智能的刷脸登录介绍2 百度云AI概述2.1 概述2.2 百度云AI的开发步骤2.3 百度云AI的注册与认证3 百度…

web大作业 静态网页(地下城与勇士 10页 带视频)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 游戏官网 | 游戏网站 | 电竞游戏 | 游戏介绍 | 等网站的设计与制作 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 …

开源免费的对象存储Minio

什么是Minio&#xff1f; Minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合存储大容量、非结构化的数据。例如&#xff0c;图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是…

机器学习:卷积神经网络

卷积神经网络卷积神经网络的结构及原理卷积层池化层激活函数全连接层反馈运算使用MNIST数据集进行代码解析数据介绍实现流程代码实现卷积神经网络的结构及原理 卷积层 卷积运算一个重要的特点就是&#xff1a;通过卷积运算&#xff0c;可以使原信号特征增强&#xff0c;并且降…

服务器常用的异常及性能排查

服务器常用的异常及性能排查 使用 top 命令查看性能指标 top 命令使用详细介绍&#xff1a;传送门 查看Tasks total 进程数 正常我们在使用过程中对每天的一个进程数大概是有一个谱的&#xff0c;比如正常就是1百多个&#xff0c;突然暴增几百&#xff0c;那就很明显这里有…

计算机网络:运输层

运输层 运输层主要解决了应用进程之间的通信&#xff0c;称之为端到端协议 1.运输层概述 计算机网-------络体系结构的角度 AP:应用进程之间的简称 2. 运输层端口号、复用与分用的概念 2.1 端口号 2.2 发送方的复用&#xff08;multiplexing&#xff09;和接收方的分用&…

【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day10

大家好&#xff0c;我是陶然同学&#xff0c;软件工程大三明年实习。认识我的朋友们知道&#xff0c;我是科班出身&#xff0c;学的还行&#xff0c;但是对面试掌握不够&#xff0c;所以我将用这100多天更新Java面试题&#x1f643;&#x1f643;。 不敢苟同&#xff0c;相信大…

锐捷RLDP理论及实验讲解

RLDP概念 RLDP&#xff08;Rapid Link Detection Protocol&#xff09;是一个用于快速检测以太网链路故障的链路协议&#xff0c;包括环路链路故障、单向链路故障、双向链路故障等 工作原理 RLDP定义了两种协议报文&#xff1a;探测报文&#xff08;Probe&#xff09;和探测响…

【Java第32期】:Spring 中普通Maven项目的创建

作者&#xff1a;有只小猪飞走啦 博客地址&#xff1a;https://blog.csdn.net/m0_62262008?typeblog 内容&#xff1a;Spring 中普通Maven项目的创建 文章目录前言一&#xff0c;创建Spring项目1.创建一个普通的Maven项目2&#xff0c;添加Spring框架3&#xff0c;添加启动类…

【数据库系统概论】关系数据理论、范式

数据库一二三范式简单解释 第一范式 一个关系模式应当是一个五元组。 R(U,D,DOM,F)R(U,D,DOM,F)R(U,D,DOM,F) 这里&#xff1a; 关系名RRR是符号化的元组语义UUU为一组属性DDD为属性组UUU中的属性所来自的域DOMDOMDOM为属性到域的映射FFF为属性组UUU上的一组数据依赖 由于D…

RabbitMQ_概述

RabbitMQ大致工作流程图 解释 Producer&#xff1a;生产者 Consumer&#xff1a;消费者 Connection&#xff1a;AMQP协议连接 Channel&#xff1a;信道&#xff0c;进行消息读写的通道&#xff0c;RabbitMQ的绝大部分操作在信道完成&#xff1b;客户端可以建立多个信道&…

用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (4)- 自定义功能块(上)

AWPLC 目前还处于开发阶段的早期&#xff0c;写这个系列文章的目的&#xff0c;除了用来验证目前所做的工作外&#xff0c;还希望得到大家的指点和反馈。如果您有任何疑问和建议&#xff0c;请在评论区留言。 1. 背景 AWTK 全称 Toolkit AnyWhere&#xff0c;是 ZLG 开发的开源…