XML简介 (EXtensible Markup Language)
XML简介 (EXtensible Markup Language)
可扩展标记语言
- 特点
- XML与操作系统、编程语言的开发平台无关
- 实现不同系统之间的数据交换
- 作用
- 数据交互
- 配置应用程序和网站
- Ajax基石
XML标签
- XML文档内容由一系列标签元素组成
<元素名 属性名="属性值">元素内容</元素名>
- 属性值用双引号包裹
- 一个元素可以有多个属性
- 属性值中不能直接包含 < " &
- 不建议使用的字符 ` >
XML编写注意事项
- 注意事项
- 所有XML元素都必须有结束标签
- XML标签对大小写敏感
- XML必须正确的嵌套
- 同级标签以缩进对齐
- 元素名称可以包含字母、数字或其他的字符
- 元素名称不能以数字或者标点符号开始
- 元素名称中不能包含空格
XML解析器
- 解析器类型
- 非验证解析器
- 检查文档格式是否良好
- 验证解析器
- 使用DTD检查文档的有效性
- 非验证解析器
XML命名空间
- XML命名空间的作用
- 解决在复杂 大型XML文件中 出现名称相同 但是含义不同的元素
<?xml version="1.0" encoding="UTF-8"?>
<cameras xmlns:canon="http://www.canon"
xmlns:nikon="http://www.nikon.com">
<canon:camera prodID="P663" name="Camera傻瓜相机"/>
<nikon:camera proID="K29B3" name="Camera超级35毫米相机"/>
</cameras>
解析XML技术
- DOM
- 基于XML文档树结构的解析
- 适用于多次访问的XML文档
- 特点:比较消耗资源
- SAX
- 基于事件的解析
- 适用于大数据量的XML文档
- 特点:占用资源少,内存消耗小
- DOM4J
- 非常优秀的Java XML API
- 性能优异、功能强大
- 开放源代码
DOM解析XML
- DOM介绍
- 文档对象模型(Document Object Model)
- DOM把XML文档映射成一个倒挂的树

常用接口介绍
- DOM解析包:org.w3c.dom
| 常用接口 | 常用方法 | 说明 |
|---|---|---|
| Document:表示整个XML文档 | NodeList getElementsByTagName(String Tag) | 按文档顺序返回文档中指定标记名称的所有元素集合 |
| Element createElement(String tagName) | 创建指定标记名称的元素 | |
| Node:该文档树中的单个节点 | NodeList getChildNodes() | 获取该元素的所有子节点,返回节点集合 |
| Element:XML文档中的一个元素 | String getTagName() | 获取元素名称 |
示例
<?xml version="1.0" encoding="UTF-8" ?>
<!--根标签只能有一对儿-->
<books><!--在标签内可以写属性--><!--转义符 > > < < --><!--1.属性值必须要用引号包裹2.一个元素可以有多条属性3.尽量不要使用 < > --><book id="1" bookname="三体" price="12"/><book><id>1</id><bookname>三体</bookname><price>12</price></book><!--1. 所有的标签必须闭合--><!--2. xml的标签对大小写敏感--><!--3. 所有的xml标签 必须正确嵌套--><!--4. 同级标签需要对齐缩进--><!--5. 标签名称不能以数字或标点符号开始--></books>
练习
<?xml version="1.0" encoding="UTF-8" ?>
<clothes><cloth range="height<165">S</cloth><cloth range="165>height<170">M</cloth><cloth range="170>height<175">L</cloth><cloth range="175>height<180">XL</cloth><cloth range="180>height">XXL</cloth>
</clothes>
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;public class Test01 {public static void main(String[] args) {//通过解析器解析XML文件SAXReader saxReader=new SAXReader();try {saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");} catch (DocumentException e) {e.printStackTrace();}}
}
增删改查
查询
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.Iterator;public class Test01 {public static void main(String[] args) {//通过解析器解析XML文件SAXReader saxReader=new SAXReader();try {//通过解析器获取文件对象 Document 文件文档Document document = saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");//获取根节点Element root = document.getRootElement();//获取根节点的迭代器Iterator iterator = root.elementIterator();while (iterator.hasNext()){//获取子节点元素 获取到的是cloth标签Element element=(Element) iterator.next();//获取子元素节点的属性System.out.println(element.attributeValue("range"));//获取子元素节点的文本内容System.out.println(element.getText());}} catch (DocumentException e) {e.printStackTrace();}}
}
public class Test03 {public static void main(String[] args) {Test02 test02=new Test02();//test02.add();//增加//test02.delete();//删除test02.update();//修改}
}
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;public class Test02 {//对xml文件进行增删改查private Document document;/*** 初始化*/public void init(){SAXReader saxReader=new SAXReader();try {document= saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");} catch (DocumentException e) {e.printStackTrace();}}/*** 给xml文件内添加节点*/public void add(){init();//获取文档节点Element root=document.getRootElement();//在根节点下添加一个cloth节点Element cloth = root.addElement("cloth");cloth.addAttribute("id","123");cloth.addText("今天中午吃什么");save();System.out.println("添加成功!!");}/*** 保存文件*/public void save(){//创建输出格式并设置输出编码OutputFormat format=OutputFormat.createCompactFormat();format.setEncoding("utf-8");try {XMLWriter xmlwriter=new XMLWriter(new FileWriter("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml"));xmlwriter.write(document);xmlwriter.close();} catch (IOException e) {e.printStackTrace();}}/*** 删除节点*/public void delete(){init();//获取根节点Element root=document.getRootElement();//获取根节点迭代器Iterator iterator=root.elementIterator();//遍历子节点while (iterator.hasNext()){//获取子节点对象Element e=(Element) iterator.next();if (e.getText().equals("今天中午吃什么")){//从父节点中删除本节点e.getParent().remove(e);System.out.println("删除成功!!!");}}save();}/*** 修改*/public void update(){init();Element root=document.getRootElement();Iterator iterator=root.elementIterator();while (iterator.hasNext()){Element e=(Element) iterator.next();// attributeValue 属性值if (e.attributeValue("id")!=null&&e.attributeValue("id").equals("123")){e.addAttribute("price","999");//给指定节点添加属性System.out.println("修改成功");break;}}save();}}
JOSN简介
- JSON(JavaScript Object Notation)
- 轻量级的文本数据交换格式
- 具有自我描述性
- 比XML传输速度快
JSON最初用来表示JavaScript中的对象
JSON相互转换
public class Test {public static void main(String[] args) {Student student=new Student();student.setName("张三");student.setAge(18);student.setHobby(new String[]{"篮球", "足球", "乒乓球"});System.out.println(student);//对象如何转换成 Json 字符串String str = JSONObject.toJSONString(student);System.out.println(str);System.out.println("Json字符串转对象-------------------------------");//Json字符串如何转对象 解析对象Student s1 = JSONObject.parseObject(str, Student.class);System.out.println(s1.toString());}
}
重写toString()方法
import java.util.Arrays;public class Student {private String name;private Integer age;private String[] hobby;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String[] getHobby() {return hobby;}public void setHobby(String[] hobby) {this.hobby = hobby;}@Overridepublic String toString() {return "{" +"\"name\":\"" + name + '\"' +"\", age\":" + age +", \"hobby\":" + Arrays.toString(hobby) +'}';}
}
相关文章:
XML简介 (EXtensible Markup Language)
XML简介 (EXtensible Markup Language) 可扩展标记语言 特点 XML与操作系统、编程语言的开发平台无关实现不同系统之间的数据交换 作用 数据交互配置应用程序和网站Ajax基石 XML标签 XML文档内容由一系列标签元素组成 <元素名 属性名"属性值">元素内容&l…...
基于Spring自动注入快速实现策略模式+工厂模式优化过多的if..else
一、策略模式 1.1策略模式定义 在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相…...
安装vcpkg管理opencv的安装+MFC缺失的解决
第一步,出现#include没有办法找到opencv头文件的问题,无法解决 在VC的提示下,安装了vcpkg,然后用vcpkg命令来帮助安装opencv,过程十分顺利。 1. cmd 到命令行窗口; 2. 建立src文件夹,并进入…...
了解树和学习二叉树
1.树 1.1 概念 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 。 注意:树形结构中…...
Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署
学习视频:【编程不良人】2021年SpringBoot最新最全教程 第十三章、拦截器 拦截器 :Interceptor 拦截 中断 类似于javaweb中的Filter,不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦…...
Pipelined-ADC设计二——结构指标及非理想因素(Part2)
接上文,本章将两个比较重要的非理想因素,因此各项指标制定。后续会对常见的非理想因素给出常见的解决方法,以及设计所采用的方法。 2.2.7. 比较器失调 在流水线 ADC 中,比较器的主要误差来源就是比较器失调,称为失调误…...
Ubuntu 常用命令之 clear 命令用法介绍
📑Linux/Ubuntu 常用命令归类整理 clear命令在Ubuntu系统下用于清除终端屏幕的内容。这个命令没有任何参数,它的主要作用就是清理终端屏幕上的所有信息,使得屏幕看起来像是新打开的一样。 使用clear命令非常简单,只需要在终端中…...
【JAVA面试题】什么是对象锁?什么是类锁?
🍎 个人博客 :个 人 主 页 🏆个人专栏:多线程JAVA ⛳️ 功 不 唐 捐 ,玉 汝 于 成 目录 前言 回答 对象锁(Object Lock): 类锁(Class Lock)࿱…...
飞天使-k8s知识点5-kubernetes基础名词扫盲
文章目录 deploymentspodNodeserviceskubectl 实现应用伸缩kubectl 实现滚动更新kubernetes架构 deployments 中文文档 http://docs.kubernetes.org.cn/251.htmldeployment是用来创建和更新应用的,master 会负责将创建好的应用实例调度到集群中的各个节点 应用实例…...
【视觉实践】使用Mediapipe进行目标检测:杯子检测和椅子检测实践
目录 1 Mediapipe 2 Solutions 3 安装mediapipe 4 实践 1 Mediapipe Mediapipe是google的一个开源项目,可以提供开源的、跨平台的常用机器学习(machine learning,ML)方案。MediaPipe是一个用于构建机器学习管道</...
C++之深拷贝进阶
目录 拷贝构造函数的深拷贝进阶版本 赋值运算符重载的深拷贝进阶 总结 上期我们学习了C中深拷贝的传统版本,今天我们将学习更为高效的版本。 拷贝构造函数的深拷贝进阶版本 传统版本代码如下: string(string& s):_str(new char[strlen(s._str)…...
导行电磁波从纵向场分量求其他方向分量的矩阵表示
导行电磁波从纵向场分量求解其他方向分量的矩阵表示 导行电磁波传播的特点 电磁波在均匀、线性、各向同性的空间中沿着 z z z轴传播,可用分离变量法将时间轴、 z z z轴与 x , y x,y x,y轴分离,电磁波的形式可表示为: E ⃗ E ⃗ ( x , y )…...
融资项目——swagger2的注解
1. ApiModel与ApiModelProperty(在实体类中使用) 如上图,ApiModel加在实体类上方,用于整体描述实体类。ApiModelProperty(value"xxx",example"xxx")放于每个属性上方,用于对属性进行描述。swagger2网页上的效果如下图&am…...
【性能优化】MySql数据库查询优化方案
阅读本文你的收获 了解系统运行效率提升的整体解决思路和方向学会MySQl中进行数据库查询优化的步骤学会看慢查询、执行计划、进行性能分析、调优 一、问题:如果你的系统运行很慢,你有什么解决方案? 关于这个问题,我们通常首先…...
Chrome浏览器http自动跳https问题
现象: Chrome浏览器访问http页面时有时会自动跳转https,导致一些问题。比如: 开发阶段访问dev环境网址跳https,后端还是http,导致接口跨域。 复现: 先访问http网址,再改成https访问…...
【C++进阶02】多态
一、多态的概念及定义 1.1 多态的概念 多态简单来说就是多种形态 同一个行为,不同对象去完成时 会产生出不同的状态 多态分为静态多态和动态多态 静态多态指的是编译时 在程序编译期间确定了程序的行为 比如:函数重载 动态多态指的是运行时 在程序运行…...
PHP开发日志——循环和条件语句嵌套不同,效率不同(循环内加入条件语句,条件语句判断后加入循环,array_map函数中加入条件语句)
十多年前开发框架时,为了效率不断试过各种代码写法,今天又遇到了,想想php8时代会不会有所变化,结果其实也还是和当年一样,但当年没写博客,但现在可以把数据记录下来了。 PHP_loop_ireflies_dark_forest 项目…...
【Seata源码学习 】 扫描@GlobalTransaction注解 篇一
1. SeataAutoConfiguration 自动配置类的加载 基于SpringBoot的starter机制,在应用上下文启动时,会加载SeataAutoConfiguration自动配置类 # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfigurationio.seata.spring.boot.aut…...
DBA-MySql面试问题及答案-上
文章目录 1.什么是数据库?2.如何查看某个操作的语法?3.MySql的存储引擎有哪些?4.常用的2种存储引擎?6.可以针对表设置引擎吗?如何设置?6.选择合适的存储引擎?7.选择合适的数据类型8.char & varchar9.Mysql字符集10.如何选择…...
网络爬虫之Ajax动态数据采集
动态数据采集 规则 有时候我们在用 requests 抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览器中可以看到正常显示的页面教据,但是使用 requests 得到的结果并没有,这是因为requests 获取的都是原始的 HTML 文档…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...
成工fpga(知识星球号)——精品来袭
(如需要相关的工程文件请关注知识星球:成工fpga,https://t.zsxq.com/DMeqH,关注即送200GB学习资料,链接已置顶!) 《孩子都能学会的FPGA》系列是成工完成的第一个系列,也有一年多的时…...
50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Dad Jokes(冷笑话卡片)
📅 我们继续 50 个小项目挑战!—— DadJokes 组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/ 豆包翻译确实可以,冷笑话应该属于各类语言比较难理解的…...
