所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

XML增删改查怎么实现?超详细示例代码一看就懂

XML增删改查怎么实现?超详细示例代码一看就懂 一

文章目录CloseOpen

这篇文章把XML增删改查拆成了最接地气的步骤:新增节点时如何指定父元素、设置文本;删除节点要避开哪些层级陷阱;修改属性值的两种常用方法;查询数据时怎么用路径表达式精准定位。每一步都配了完整可运行的示例代码,注释写得明明白白——新手复制代码就能操作,遇到疑问看注释就懂。

不管你是刚接触XML的初学者,还是需要补基础的开发者,看完这篇都能快速掌握XML增删改查的实用技巧,再也不用对着文档猜逻辑了。

你是不是刚学XML时,对着文档里的节点操作一脸懵?想加个节点怕结构错,删内容又怕把父节点连带删掉,改个属性值总报语法错误,查数据绕来绕去找不到对应元素?我去年帮做后端的朋友调XML配置文件时,也踩过一模一样的坑——明明看了理论,一动手就出错,直到把每一步拆成“能直接复制粘贴”的示例,才彻底搞明白。今天我把这些实操经验整理出来,连代码带解释,你跟着做,半小时就能搞定XML增删改查

先搞懂XML的基础结构,不然操作全是瞎摸

学XML操作前,得先把基础结构搞透——不然就像没学会走路就想跑,肯定摔跟头。XML其实就是套“标签裹内容”的规则,核心概念就三个:元素、属性、子元素,我用大白话给你解释:

  • 元素:就是带尖括号的标签对,比如是开始标签,是结束标签,中间裹的内容就是元素的“正文”。你可以把它想成电脑里的文件夹,用来装子文件夹(子元素)或者文件(文本内容)。
  • 属性:是元素的“附加说明”,写在开始标签里,比如里的id就是属性,值是“1”。它就像文件夹的“备注”,用来快速区分同类型元素(比如两本book,用id就能分清谁是谁)。
  • 子元素:是嵌套在父元素里的元素,比如里的就是子元素。它的层级要明确——就像“文档”文件夹里能放“工作文档”子文件夹,但不能直接把“工作文档”放到C盘根目录(除非你想结构混乱)。
  • 我之前犯过一个超傻的错误:想给加个子元素,结果写成了...——直接导致XML解析报错,因为父元素和子元素同名,系统分不清层级。后来我才明白:元素层级要像“树”一样,根节点(比如)下面是分支(),分支下面是叶子( ),不能乱套

    为了让你更清楚,我做了个表格,把基础概念、示例和常见错误列出来,一看就懂:

    概念 示例 常见错误
    元素(Element) ... 未闭合标签(如只写没写
    属性(Attribute) ... 属性值没加引号(如id=1,正确是id="1"
    子元素(Child Element) ... 子元素层级混乱(如...

    为啥要反复强调基础结构?因为所有增删改查操作,都是基于“找到正确的元素”——要是父元素找错了,比如想给,结果加到了里,那就会变成的子元素,整个XML结构就乱了。我朋友之前就因为这事儿踩过坑:他把数据库连接信息放到了错误的层级,导致系统启动失败,查了两小时才发现是XML结构错了。所以啊,先把结构摸清楚,操作起来才不会慌。

    XML增删改查的实操步骤,每步都给你写好代码

    搞懂基础结构后,咱们直接上实操——我用Python的xml.etree.ElementTree库举例子,这个库是Python自带的,不用额外安装,新手也能上手。所有示例都基于这个简单的XML文件(books.xml):

    
    

    XML教程

  • 新增节点:找准父元素是关键
  • 新增节点其实就两步:找到要添加子元素的父元素创建子元素并塞进去。比如要给加一个子元素,内容是“张三”,步骤如下:

    第一步:导入库并解析XML

    首先得导入xml.etree.ElementTree库(一般简称ET),然后把XML文件解析成一个“树结构”——你可以理解为把XML变成电脑能看懂的“地图”,这样才能找到对应的元素:

    # 导入库
    

    import xml.etree.ElementTree as ET

    解析XML文件,得到树结构

    tree = ET.parse('books.xml')

    获取XML的根元素(这里根元素是)

    root = tree.getroot()

    第二步:找到父元素

    要加子元素,得先找到父元素——这里用XPath语法(XML的查询语言,能精准定位元素)。.//book[@id='1']的意思是:

  • .//:从当前节点(根元素)开始,找所有后代中的元素(不管层级多深);
  • [@id='1']:筛选出属性id等于“1”的元素(避免找错其他book)。
  • 代码很简单:

    # 找到父元素
    

    book = root.find(".//book[@id='1']")

    第三步:创建并添加子元素

    找到父元素后,就可以创建子元素,并把它“粘”到父元素里:

    # 创建元素(相当于新建一个“子文件夹”)
    

    author = ET.Element('author')

    设置的文本内容(相当于给“子文件夹”里放个“文件”)

    author.text = '张三'

    把添加到里(父元素.append(子元素),千万别搞反!)

    book.append(author)

    第四步:保存修改后的XML

    最后一步很重要——把修改后的内容保存回文件,不然你改的都是“内存里的临时数据”,一关程序就没了:

    # 保存XML文件(encoding='utf-8'防止中文乱码,xml_declaration=True保留XML声明)
    

    tree.write('books.xml', encoding='utf-8', xml_declaration=True)

    改完后,books.xml的内容会变成这样:

    
    
    

    XML教程

    张三

    我踩过的坑:第一次做的时候,我把book.append(author)写成了author.append(book)——结果变成了的子元素,结构彻底乱了!后来我记住了:父元素.append(子元素),就像“把文件放进文件夹”,文件夹要在前,文件在后,千万别搞反。

  • 删除节点:别把父节点一起删了
  • 删除节点的核心是:删的是“元素本身”,不是元素里的内容。比如要删掉刚才加的元素,步骤更简单:

    第一步:找到要删除的元素

    首先得找到要删的——因为它是的子元素,直接用book.find('author')就能找到:

    # 找到要删除的元素
    

    author = book.find('author')

    第二步:删除元素并保存

    用父元素的remove()方法删掉子元素,然后保存:

    # 从父元素中删除
    

    book.remove(author)

    保存修改

    tree.write('books.xml', encoding='utf-8', xml_declaration=True)

    关键提醒:千万别删错父元素!比如如果你写root.remove(book),那整个都会被删掉,包括里面的——我朋友之前就犯过这错,把配置文件里的关键节点删了,导致系统启动失败,所以删之前一定要确认:你要删的是哪个元素

  • 修改内容:区分“元素文本”和“属性值”
  • 修改内容分两种情况:修改元素的文本内容(比如把里的“XML教程”改成“XML从入门到精通”),修改元素的属性值(比如把id从“1”改成“2”)。

    情况一:修改元素的文本内容

    元素的文本内容存在text属性里,直接赋值就能改。比如要修改的内容:

    # 找到的元素
    <p>title = book.find('title')</p>
    <h1>修改文本内容</h1>
    <p>title.text = 'XML从入门到精通'</p>
    <h1>保存</h1>
    <p>tree.write('books.xml', encoding='utf-8', xml_declaration=True)</p>

    改完后,会变成:

    XML从入门到精通

    情况二:修改元素的属性值

    修改属性值要用set()方法——第一个参数是属性名,第二个是新值。比如要把id从“1”改成“2”:

    # 用set()方法修改属性值
    

    book.set('id', '2')

    保存

    tree.write('books.xml', encoding='utf-8', xml_declaration=True)

    改完后,会变成:

    
    

    XML从入门到精通

    我用过的技巧:刚开始学的时候,我总搞混“元素文本”和“属性值”——后来发现一个简单的区分方法:元素文本是标签里的内容(比如文本),属性值是标签里的“key=value”(比如。记住这个,修改的时候就不会错了。

  • 查询数据:用XPath精准定位
  • 查询数据是XML操作中最常用的功能——比如要找所有booktitle,或者找id=2bookauthor。这里重点讲XPath语法,因为它比遍历整个XML快多了,而且能精准定位。

    常见的XPath语法示例

    我整理了几个常用的XPath表达式,结合books.xml的例子给你解释,一看就懂:

    XPath表达式 含义 结果
    .//book 找所有元素 […]
    .//book[@id=’2′] 找id=2的元素
    .//book/title 找所有的子元素 XML从入门到精通
    .//book[@id=’2′]/author 找id=2的的子元素 张三

    用XPath查询的代码示例

    比如要找所有booktitle内容,代码如下:

    # 找到所有的元素
    <p>titles = root.findall(".//book/title")</p>
    <h1>遍历输出每个<title>的文本内容
    

    for title in titles:

    print(title.text) # 输出:XML从入门到精通

    再比如要找id=2bookauthor内容:

    # 找到id=2的的元素
    

    author = root.find(".//book[@id='2']/author")

    print(author.text) # 输出:张三

    我用过的小技巧:刚开始学XPath时,我总记不住语法——后来发现W3School的XPath教程(链接:https://www.w3school.com.cn/xpath/index.asp,rel=”nofollow”)特别好用,里面有互动示例,点一下就能看到结果,我自己也常翻。

    其实XML操作真的不难——核心就是“找对元素,做对应操作”。我之前帮做电商的朋友处理过1000条产品数据,用Python脚本批量修改价格,半小时就搞定了;要是手动改,得改到猴年马月。所以啊,掌握这些实操步骤,能帮你节省很多时间。

    你可以找个简单的XML文件试试,比如自己写个books.xml,跟着代码敲一遍——要是遇到问题,比如找不到元素或者语法错误,欢迎留言告诉我,我帮你看看。对了,不同的编程语言操作XML的方法有点不一样(比如Java用DOM4J,C#用XmlDocument),但核心逻辑都是一样的:


    本文常见问题(FAQ)

    学XML操作前为什么要先搞懂基础结构?

    因为所有增删改查操作都是基于“找到正确的元素”,如果基础结构没搞透,比如父元素和子元素层级乱了,操作时很容易找错位置。比如想给加子元素,结果加到了里,整个XML结构就乱了,甚至会导致解析报错。

    XML的基础结构核心是元素、属性、子元素,元素像文件夹,属性像文件夹备注,子元素像嵌套的子文件夹,层级要像树一样清晰,先把这些概念搞明白,操作起来才不会瞎摸。

    新增XML节点时最容易踩什么坑?

    最容易错的是“找不准父元素”或者“父元素和子元素搞反”。比如想给加子元素,结果找到的是父元素,或者把author.append(book)写成book.append(author),导致子元素层级错误。

    正确的步骤是先找到要添加子元素的父元素(比如用XPath找),再创建子元素,最后用父元素.append(子元素)的方式添加,就像把文件放进对应的文件夹里。

    删除XML节点时怎么避免连带删掉父节点?

    关键是要明确“删的是元素本身”,而且要用父元素的remove()方法。比如要删子元素,得先找到的父元素,然后用book.remove(author),而不是root.remove(book)——后者会把整个节点连带子元素一起删掉。

    删之前一定要确认要删的元素是谁,比如想删就找元素,别误选了父元素,不然会把里面的也一起删掉,导致结构破坏。

    修改XML内容时怎么区分“元素文本”和“属性值”?

    元素文本是标签对中间的内容,比如

    XML教程里的“XML教程”,修改时直接改元素的text属性就行;属性值是元素开始标签里的附加说明,比如里的“1”,修改时要用元素的set()方法。

    比如要改

    的内容,找到<title>元素后赋值title.text = “新标题”;要改的id,找到元素后用book.set(‘id’, ‘2’),这样就不会搞混两种修改方式了。

    原文链接:https://www.mayiym.com/53117.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码