news 2026/1/20 23:51:15

XML文件入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
XML文件入门

XML概述

一、XML由来

(一)什么是XML?

咱们先拆解名字:XML是“可扩展的标记语言”,核心就两个关键词——标记语言+可扩展

1. 先懂“标记语言”:像给数据贴标签

你肯定见过HTML(就是做网页的那个),它和XML是“亲戚”,都是用<>这种标签来包裹内容的,比如:

  • HTML里写<p>我是段落</p><p>就是固定的“段落标签”;
  • XML也这么写,但标签能自己定,比如想存水果信息,就可以写<苹果>红富士</苹果>,想存快递信息,就写<快递单号>123456</快递单号>

简单说:标记语言就是用自定义/固定的标签,把数据“框”起来,让数据结构清晰,不管是人还是电脑都能看懂。

2. “可扩展”:标签想怎么定就怎么定(这是XML的核心)

HTML的标签是死的,比如只能用<div>``<p>``<img>这些,改不了;但XML的标签完全由你说了算——你做电商就定<商品>``<价格>,做通讯录就定<姓名>``<手机号>,没有任何限制,这就是“可扩展”。

3. 版本的事儿:不用管1.1,就学1.0就行

XML是由W3C(后面会说)制定的,1998年出了1.0版本,2004年又出了1.1版本。但1.1有个大坑:和1.0不兼容(就像安卓APP装不上苹果手机),所以没人用;同年W3C又更了1.0的第三版,这版兼容老版本,也是现在所有人都在用的,咱们学这个就行。

补充:XML的“出身”

它是SGML(标准通用标记语言)的“简化版”,SGML太复杂,普通人用不上,所以就简化出XML,专门用来做结构化的数据处理。

(二)W3C是个啥组织?不是官方,但说话超管用

1. 基本情况:Web界的“行业老大”

W3C翻译过来是“万维网联盟”,1994年10月成立的,不是政府官方机构(比如工信部),更像是全球互联网领域的“行业协会”——聚集了各大科技公司(谷歌、微软、阿里等)、专家,一起研究Web技术。

2. 核心工作:制定Web的“规矩”

它的目标是把互联网的技术统一起来,让不同网站、不同系统之间能互通。这么多年下来,已经出了90多份技术规范,比如咱们熟悉的HTML、XML、CSS、HTTP这些,都是它定的“规矩”。

3. 标准的“含金量”:虽叫“建议”,实则是“行业法则”

W3C自己说,它发布的规范只是“推荐标准”(相当于“建议大家这么做”),但因为它的权威性,这些“建议”最后都成了全世界公认的标准——比如你写HTML不按W3C的规范来,浏览器就可能显示不正常,所有开发者都得按它的规矩来。

W3C就是Web技术的“定规矩的人”,不是官方,但全行业都听它的。

二、XML的作用

XML(可扩展标记语言)的核心作用可总结为三大核心场景,且各有明确的价值定位:

  1. 配置文件(最主流用途):作为程序/系统的配置载体,凭借其结构化、可读性强、可扩展的特性,能清晰定义程序的参数、模块关联、运行规则等(如Java的Spring配置、Tomcat服务器配置),无需修改代码即可调整程序行为,降低维护成本。
  2. 跨语言数据交换:作为通用的数据格式,独立于编程语言和平台,可在不同语言(如Java、Python、C#)、不同系统间标准化传输和解析数据,是早期异构系统数据交互的核心媒介(如WebService接口数据传输)。
  3. 轻量级数据存储:以结构化标签组织数据,可作为小型、简单场景的“轻量数据库”,直接存储少量结构化数据(如本地应用的用户信息、简单业务数据),无需依赖复杂数据库系统,实现快速存取和管理。

XML的核心价值在于结构化、可扩展、跨平台,既适配程序配置的灵活调整需求,也满足异构系统的数据互通,还能支撑简单场景的数据存储,是兼具可读性与通用性的标记语言。

三、XML与HTML比较

第一点:HTML是“固定菜单”,XML是“空白笔记本”

HTML:元素固定=餐厅里的“固定菜单”

HTML的元素(比如<div><p><img><h1>)就像餐厅里印好的固定菜单,菜名都是定死的:只能点“红烧肉”“鱼香肉丝”“拍黄瓜”,没有的菜你点不了,老板也不会给你做。
比如写HTML只能用这些固定标签:

<!-- 只能用HTML规定好的标签,不能自己造 --><h1>我的首页</h1><!-- 一级标题,固定标签 --><p>这是一段文字</p><!-- 段落,固定标签 --><imgsrc="图片.jpg"><!-- 图片,固定标签 -->

哪怕你想表达“我的宠物猫”,也只能用现有标签凑:<p>我的宠物猫:橘猫</p>,没法自己造一个<宠物猫>标签——HTML不认自定义的标签,写了也白写。

XML:自定义元素=空白笔记本,想写啥就写啥

XML的元素完全是自定义的,就像你拿了一本空白笔记本,想写什么标题、什么分类,全由你定。
比如你想记录宠物信息,直接造标签就行:

<!-- 自己定义<宠物猫>、<名字>、<品种>这些标签,XML都认 --><宠物记录><宠物猫><名字>橘子</名字><品种>橘猫</品种><年龄>2岁</年龄></宠物猫><宠物狗><名字>旺财</名字><品种>金毛</品种><年龄>3岁</年龄></宠物狗></宠物记录>

哪怕你想造<打工人>``<工资>``<摸鱼时长>这些奇奇怪怪的标签,XML也完全接受——它不管你标签叫啥,只认“你定义的结构”,这就是“自定义元素”的核心。

第二点:HTML是“自带翻译的说明书”,XML是“无翻译的外文手稿”

HTML:浏览器自动解析=说明书有自带的翻译,拿过来就能看懂

HTML是给浏览器(Chrome、Edge)用的,浏览器天生就认识所有HTML标签,能自动解析并展示成网页:

  • 看到<h1>就知道要显示成大号粗体标题;
  • 看到<img>就知道要加载并显示图片;
  • 你只需要写HTML代码,打开浏览器就能直接看到效果,不用自己写任何“解析代码”。
    就像你拿到一本带中文翻译的英文说明书,不用自己查字典,直接就能看懂怎么用。
XML:解析器要自己写=拿到纯外文手稿,得自己学外语翻译

XML的标签是你自定义的,没有任何工具天生认识这些标签——比如你定义了<宠物猫>,电脑根本不知道这是啥意思,得你自己写“解析代码”告诉电脑:
“找到<宠物猫>标签,把里面的<名字>内容取出来,显示在屏幕上”。
就像你拿到一本纯法语的手稿,没有翻译,得自己学法语、自己逐字翻译才能看懂内容。
比如想读取上面XML里的“橘子”,得写解析代码(类似之前讲的XML解析逻辑),告诉程序:“先找<宠物记录>,再找里面的<宠物猫>,再取<名字>里的文字”——这部分代码得自己写,没有现成的“通用解析器”直接用。

第三点:HTML是“专用工具(菜刀)”,XML是“通用工具(瑞士军刀)”

HTML:只能做网页=菜刀只能切菜

HTML的唯一使命就是“描述网页的结构和内容”,让浏览器能展示网页——它除了做网页,啥也干不了。
比如你想记录物流信息、存储订单数据、传递接口数据,用HTML就完全不合适,因为它的标签都是为“网页展示”设计的,没法清晰表达这些复杂的结构化数据。
就像菜刀只能用来切菜,你想用它拧螺丝、开啤酒、剪绳子,根本做不到。

XML:能做的事多=瑞士军刀能切菜、拧螺丝、开啤酒

XML因为能自定义标签、能表达结构化信息,用途特别广:

  • 存储数据:比如电商平台存订单(<订单号>、<商品>、<收货人>);
  • 传递数据:比如不同系统之间交换数据(比如物流系统给电商系统传快递信息);
  • 配置文件:比如框架的配置(Spring的xml配置文件);
  • 描述数据:比如定义接口返回的格式(告诉对方“我返回的<用户ID>是啥,<手机号>是啥”)。
    就像瑞士军刀,既能切菜(类似HTML做简单展示),还能拧螺丝、开啤酒、剪绳子,适配各种场景。

总结一下

特性HTMLXML
元素规则标签固定(只能用规定好的)标签自定义(想造啥标签就造啥)
解析方式浏览器自动解析(不用自己写代码)需自己写解析器(告诉程序标签啥意思)
适用场景仅用于制作网页(专用)存储/传递/配置数据等(通用)

一句话:HTML是“网页专属的固定格式”,拿来就能做网页;XML是“万能的自定义格式”,能装各种数据,但得自己写代码解析。

四、XML和properties(属性文件)比较

第一点:属性文件是“购物清单”,XML是“家庭账本”

属性文件(properties):只能存“平面信息”

平面信息就像只有“键-值”的简单清单,只能一对一,没法分层、没法有复杂结构。
比如你写个.properties文件,内容只能是这样:

# 购物清单.properties 苹果=5个 牛奶=2箱 面包=3袋

它的特点是:只有“名字=值”这一种格式,所有内容都在同一层,没法表达“谁买的、什么时候买的、哪个超市买的”这些关联信息——比如你想说明“妈妈买的苹果,在沃尔玛买的,花了20块”,用properties就只能硬凑:

妈妈_苹果_超市=沃尔玛 妈妈_苹果_价格=20元

又乱又不直观,本质还是“一对一”的扁平结构,没法体现“苹果属于妈妈的采购、关联超市和价格”这种层级/关联关系。

XML:能存“结构化信息”

结构化信息就像带分类、分层、关联的账本,能把复杂关系说清楚。
还是上面的例子,XML可以这么写:

<!-- 家庭账本.xml --><采购记录><采购人员>妈妈</采购人员><商品><名称>苹果</名称><数量>5个</数量><购买地点>沃尔玛</购买地点><价格>20元</价格></商品><商品><名称>牛奶</名称><数量>2箱</数量><购买地点>家乐福</购买地点><价格>40元</价格></商品></采购记录>

你看:

  • 有层级:“商品”是“采购记录”的子内容,“名称/数量”又是“商品”的子内容;
  • 有结构:能清晰关联“妈妈买的苹果”对应的超市和价格,还能批量放多个商品;
  • 能扩展:想加“购买时间”,直接在<商品>里加一行<时间>2025-12-16</时间>就行,不影响整体结构。

简单说:properties只能记“啥是啥”,XML能记“啥属于啥、啥关联啥”。

第二点:解析properties是“查字典”,解析XML是“拆快递”

解析properties:用Properties类=查现成字典

解析就是“读取文件里的内容并使用”。Java里读properties文件,就像查一本按“拼音首字母排序的字典”,工具给你做好了:

// 读properties的核心代码(超简单)Propertiesprop=newProperties();// 加载文件prop.load(newFileInputStream("购物清单.properties"));// 直接拿值,一行搞定String苹果数量=prop.getProperty("苹果");System.out.println(苹果数量);// 输出:5个

Properties类是Java专门为属性文件做的“专属工具”,不用你操心怎么拆内容,直接“问它要啥,它就给啥”,就像你查字典,翻到“苹果”那页,直接看后面的解释就行。

解析XML:复杂=拆带多层包装的快递

XML因为有层级、有结构,解析它就像拆一个层层打包的快递:

  1. 先拆最外层的箱子(<采购记录>);
  2. 再拆里面的小盒子(<采购人员>、<商品>);
  3. 每个小盒子里还有更小的包装(<名称>、<价格>);
  4. 要是有多个<商品>,还得一个个拆、一个个数。

而且Java里没有“一键读XML”的简单类,你得用DOM、SAX、JDOM这些解析方式,写一堆代码:

// 解析XML的简化代码(实际更复杂)DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=factory.newDocumentBuilder();Documentdoc=builder.parse(newFile("家庭账本.xml"));// 找<商品>节点NodeListgoodsList=doc.getElementsByTagName("商品");// 遍历每个商品,再找里面的<名称>、<价格>for(inti=0;i<goodsList.getLength();i++){Nodegoods=goodsList.item(i);ElementgoodsElement=(Element)goods;String名称=goodsElement.getElementsByTagName("名称").item(0).getTextContent();String价格=goodsElement.getElementsByTagName("价格").item(0).getTextContent();System.out.println(名称+":"+价格);}

相当于你没有“现成字典”,得自己动手把快递一层一层拆开来,才能拿到里面的东西,步骤多、代码也多。

特性properties属性文件XML文档
存储能力只能存“键=值”的扁平信息(简单)能存分层、关联的结构化信息(复杂)
解析难度用Properties类一键读取(超简单)要写一堆解析代码(麻烦)
适用场景简单配置(比如数据库密码、端口号)复杂数据(比如订单、接口返回数据)

一句话:简单的“一对一”配置用properties(省事),需要分层/关联的复杂数据用XML(能装),但解析XML得多费点劲。

XML语法

XML的语法核心就一个:严格、规整、有统一规则,不像HTML能“随便写”(比如少个闭合标签也能显示),XML只要语法错一点,程序就解析不了。

一、XML的基本骨架(必须有!)

一个完整的XML文档,得有“声明+根元素”这两个核心,少一个都不合法,先看最基础的完整例子:

<?xml version="1.0" encoding="UTF-8"?><!-- XML声明 --><通讯录><!-- 根元素 --><联系人><!-- 子元素 --><姓名>张三</姓名><手机号>13800138000</手机号><地址>北京市朝阳区</地址></联系人><联系人><姓名>李四</姓名><手机号>13900139000</手机号><地址>上海市浦东新区</地址></
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/20 19:04:56

Seed-Coder-8B-Base与SonarQube智能集成路径

Seed-Coder-8B-Base与SonarQube智能集成路径 在现代软件交付的节奏中&#xff0c;我们早已习惯了两种“声音”&#xff1a;一种来自IDE里流畅的代码补全提示&#xff0c;另一种则是CI流水线上冷冰冰的质量门禁失败通知。前者鼓励你加速前进&#xff0c;后者却总在关键时刻踩下刹…

作者头像 李华
网站建设 2026/1/20 15:52:40

基于CentOS7 DM8单机部署配置记录-20251216

前言 学习动力&#xff0c;源于兴趣和需求&#xff0c;最近接到内部需求&#xff0c;说要本地部署一个DM8给开发同学进行做开发适配&#xff0c;然后就开始了进行部署之旅。 下载地址如下&#xff1a; DM官方下载地址 选择对应版本&#xff0c;进行下载安装包。 一、安装前…

作者头像 李华
网站建设 2026/1/20 15:35:55

大模型入门:预训练、微调和蒸馏,一篇文章全掌握

本文详细介绍了大模型训练的三大核心技术&#xff1a;预训练&#xff08;海量无标注数据培养通用能力&#xff09;、微调&#xff08;专业数据优化特定任务&#xff09;和蒸馏&#xff08;大模型知识迁移至小模型&#xff09;。文章通过生动比喻和具体实现方式&#xff0c;帮助…

作者头像 李华
网站建设 2026/1/19 23:17:55

LobeChat能否编写教案?教师备课自动化尝试

LobeChat 能否编写教案&#xff1f;教师备课自动化尝试 在一所普通中学的办公室里&#xff0c;一位语文老师正对着空白文档发愁。明天要讲《孔乙己》&#xff0c;可她已经连续加班三天准备公开课材料&#xff0c;教案改了五稿仍不满意&#xff1a;结构松散、学生活动单一、新课…

作者头像 李华
网站建设 2026/1/19 10:53:40

vLLM-Omni:全模态AI推理框架技术解析

vLLM-Omni&#xff1a;全模态AI推理框架技术解析 在大模型落地生产系统的热潮中&#xff0c;一个看似不起眼却极为关键的问题正困扰着无数开发者——为什么训练好的强大模型&#xff0c;一旦部署成API服务就变得“卡顿”、响应慢、成本高&#xff1f;明明GPU显存充足&#xff0…

作者头像 李华
网站建设 2026/1/19 3:54:15

18、基于位置点的恢复

基于位置点的恢复 恢复流程概述 指定位置点的恢复主要包含两步: 恢复全量备份。 应用全量备份之后的 binlog 到指定时间点。 测试环境准备 创建测试数据库和表: create database sbtest; create table sbtest.t1(id int auto_increment primary key, insert_time datetim…

作者头像 李华