当前位置: 首页 > news >正文

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><!--在标签内可以写属性--><!--转义符  > &gt;  < &lt; --><!--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&lt;165">S</cloth><cloth range="165&gt;height&lt;170">M</cloth><cloth range="170&gt;height&lt;175">L</cloth><cloth range="175&gt;height&lt;180">XL</cloth><cloth range="180&gt;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策略模式定义 在策略模式&#xff08;Strategy Pattern&#xff09;中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略&#xff0c;并将每个算法封装在独立的类中&#xff0c;使得它们可以互相…...

安装vcpkg管理opencv的安装+MFC缺失的解决

第一步&#xff0c;出现#include没有办法找到opencv头文件的问题&#xff0c;无法解决 在VC的提示下&#xff0c;安装了vcpkg&#xff0c;然后用vcpkg命令来帮助安装opencv&#xff0c;过程十分顺利。 1. cmd 到命令行窗口&#xff1b; 2. 建立src文件夹&#xff0c;并进入…...

了解树和学习二叉树

1.树 1.1 概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看 起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 注意&#xff1a;树形结构中…...

Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第十三章、拦截器 拦截器 &#xff1a;Interceptor 拦截 中断 类似于javaweb中的Filter&#xff0c;不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦…...

Pipelined-ADC设计二——结构指标及非理想因素(Part2)

接上文&#xff0c;本章将两个比较重要的非理想因素&#xff0c;因此各项指标制定。后续会对常见的非理想因素给出常见的解决方法&#xff0c;以及设计所采用的方法。 2.2.7. 比较器失调 在流水线 ADC 中&#xff0c;比较器的主要误差来源就是比较器失调&#xff0c;称为失调误…...

Ubuntu 常用命令之 clear 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 clear命令在Ubuntu系统下用于清除终端屏幕的内容。这个命令没有任何参数&#xff0c;它的主要作用就是清理终端屏幕上的所有信息&#xff0c;使得屏幕看起来像是新打开的一样。 使用clear命令非常简单&#xff0c;只需要在终端中…...

【JAVA面试题】什么是对象锁?什么是类锁?

&#x1f34e; 个人博客 &#xff1a;个 人 主 页 &#x1f3c6;个人专栏&#xff1a;多线程JAVA ⛳️ 功 不 唐 捐 &#xff0c;玉 汝 于 成 目录 前言 回答 对象锁&#xff08;Object Lock&#xff09;&#xff1a; 类锁&#xff08;Class Lock&#xff09;&#xff1…...

飞天使-k8s知识点5-kubernetes基础名词扫盲

文章目录 deploymentspodNodeserviceskubectl 实现应用伸缩kubectl 实现滚动更新kubernetes架构 deployments 中文文档 http://docs.kubernetes.org.cn/251.htmldeployment是用来创建和更新应用的&#xff0c;master 会负责将创建好的应用实例调度到集群中的各个节点 应用实例…...

【视觉实践】使用Mediapipe进行目标检测:杯子检测和椅子检测实践

目录 1 Mediapipe 2 Solutions 3 安装mediapipe 4 实践 1 Mediapipe Mediapipe是google的一个开源项目,可以提供开源的、跨平台的常用机器学习(machine learning,ML)方案。MediaPipe是一个用于构建机器学习管道</...

C++之深拷贝进阶

目录 拷贝构造函数的深拷贝进阶版本 赋值运算符重载的深拷贝进阶 总结 上期我们学习了C中深拷贝的传统版本&#xff0c;今天我们将学习更为高效的版本。 拷贝构造函数的深拷贝进阶版本 传统版本代码如下&#xff1a; string(string& s):_str(new char[strlen(s._str)…...

导行电磁波从纵向场分量求其他方向分量的矩阵表示

导行电磁波从纵向场分量求解其他方向分量的矩阵表示 导行电磁波传播的特点 电磁波在均匀、线性、各向同性的空间中沿着 z z z轴传播&#xff0c;可用分离变量法将时间轴、 z z z轴与 x , y x,y x,y轴分离&#xff0c;电磁波的形式可表示为&#xff1a; E ⃗ E ⃗ ( x , y )…...

融资项目——swagger2的注解

1. ApiModel与ApiModelProperty(在实体类中使用) 如上图&#xff0c;ApiModel加在实体类上方&#xff0c;用于整体描述实体类。ApiModelProperty(value"xxx",example"xxx")放于每个属性上方&#xff0c;用于对属性进行描述。swagger2网页上的效果如下图&am…...

【性能优化】MySql数据库查询优化方案

阅读本文你的收获 了解系统运行效率提升的整体解决思路和方向学会MySQl中进行数据库查询优化的步骤学会看慢查询、执行计划、进行性能分析、调优 一、问题&#xff1a;如果你的系统运行很慢&#xff0c;你有什么解决方案&#xff1f; ​关于这个问题&#xff0c;我们通常首先…...

Chrome浏览器http自动跳https问题

现象&#xff1a; Chrome浏览器访问http页面时有时会自动跳转https&#xff0c;导致一些问题。比如&#xff1a; 开发阶段访问dev环境网址跳https&#xff0c;后端还是http&#xff0c;导致接口跨域。 复现&#xff1a; 先访问http网址&#xff0c;再改成https访问&#xf…...

【C++进阶02】多态

一、多态的概念及定义 1.1 多态的概念 多态简单来说就是多种形态 同一个行为&#xff0c;不同对象去完成时 会产生出不同的状态 多态分为静态多态和动态多态 静态多态指的是编译时 在程序编译期间确定了程序的行为 比如&#xff1a;函数重载 动态多态指的是运行时 在程序运行…...

PHP开发日志——循环和条件语句嵌套不同,效率不同(循环内加入条件语句,条件语句判断后加入循环,array_map函数中加入条件语句)

十多年前开发框架时&#xff0c;为了效率不断试过各种代码写法&#xff0c;今天又遇到了&#xff0c;想想php8时代会不会有所变化&#xff0c;结果其实也还是和当年一样&#xff0c;但当年没写博客&#xff0c;但现在可以把数据记录下来了。 PHP_loop_ireflies_dark_forest 项目…...

【Seata源码学习 】 扫描@GlobalTransaction注解 篇一

1. SeataAutoConfiguration 自动配置类的加载 基于SpringBoot的starter机制&#xff0c;在应用上下文启动时&#xff0c;会加载SeataAutoConfiguration自动配置类 # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfigurationio.seata.spring.boot.aut…...

DBA-MySql面试问题及答案-上

文章目录 1.什么是数据库?2.如何查看某个操作的语法?3.MySql的存储引擎有哪些?4.常用的2种存储引擎&#xff1f;6.可以针对表设置引擎吗&#xff1f;如何设置&#xff1f;6.选择合适的存储引擎&#xff1f;7.选择合适的数据类型8.char & varchar9.Mysql字符集10.如何选择…...

网络爬虫之Ajax动态数据采集

动态数据采集 规则 有时候我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能和在浏览器中看到的不一样&#xff0c;在浏览器中可以看到正常显示的页面教据&#xff0c;但是使用 requests 得到的结果并没有&#xff0c;这是因为requests 获取的都是原始的 HTML 文档…...

c语言的初始学习(练习)

##初学c语言---MOOC浙江大学翁恺先生学习c语言 那么我们先看看这个题目吧&#xff0c;这是初始语法的应用。 记住&#xff0c;我们的程序是按步骤执行的&#xff0c;并不是在不同的两行同时进行。 程序设计&#xff1a;1.了解题目的需要&#xff0c;几个变量需要用到&#x…...

研究论文 2022-Oncoimmunology:AI+癌RNA-seq数据 识别细胞景观

Wang, Xin, et al. "Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironment." Oncoimmunology 11.1 (2022): 2043662. https://www.tandfonline.com/doi/full/10.1080/2162402X.2022.2043662 被引次数&#xff1…...

ChatGPT4与ArcGIS Pro3助力AI 地理空间分析和可视化及助力科研论文写作

在地学领域&#xff0c;ArcGIS几乎成为了每位科研工作者作图、数据分析的必备工具&#xff0c;而ArcGIS Pro3除了良好地继承了ArcMap强大的数据管理、制图、空间分析等能力&#xff0c;还具有二三维融合、大数据、矢量切片制作及发布、任务工作流、时空立方体等特色功能&#x…...

okhttp系列-一些上限值

1.正在执行的任务数量最大值是64 异步请求放入readyAsyncCalls后&#xff0c;遍历readyAsyncCalls取出任务去执行的时候&#xff0c;如果发现runningAsyncCalls的数量大于等于64&#xff0c;就不从readyAsyncCalls取出任务执行。 public final class Dispatcher {private int …...

C++面向对象(OOP)编程-STL详解(vector)

本文主要介绍STL六大组件&#xff0c;并主要介绍一些容器的使用。 目录 1 泛型编程 2 CSTL 3 STL 六大组件 4 容器 4.1 顺序性容器 4.1.1 顺序性容器的使用场景 4.2 关联式容器 4.2.1 关联式容器的使用场景 4.3 容器适配器 4.3.1 容器适配器的使用场景 5 具体容器的…...

postman几种常见的请求方式

1、get请求直接拼URL形式 对于http接口&#xff0c;有get和post两种请求方式&#xff0c;当接口说明中未明确post中入参必须是json串时&#xff0c;均可用url方式请求 参数既可以写到URL中&#xff0c;也可写到参数列表中&#xff0c;都一样&#xff0c;请求时候都是拼URL 2&am…...

openai最新探索:超级对齐是否可行?

前言 今天来介绍一篇openai最新的paper&#xff1a;弱到强的对齐。 openai专门成立了一个团队来做大模型的超级对齐即superhuman model&#xff0c;之前chatgpt取得成功依赖RLHF即依赖人类反馈&#xff0c;但是作者期望的superhuman model将会是一个能够处理各种复杂问题的强…...

本地websocket服务端结合cpolar内网穿透实现公网访问

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…...

关于“Python”的核心知识点整理大全37

目录 13.6.2 响应外星人和飞船碰撞 game_stats.py settings.py alien_invasion.py game_functions.py ship.py 注意 13.6.3 有外星人到达屏幕底端 game_functions.py 13.6.4 游戏结束 game_stats.py game_functions.py 13.7 确定应运行游戏的哪些部分 alien_inva…...

Vivado中的FFT IP核使用(含代码)

本文介绍了Vidado中FFT IP核的使用&#xff0c;具体内容为&#xff1a;调用IP核>>配置界面介绍>>IP核端口介绍>>MATLAB生成测试数据>>测试verilogHDL>>TestBench仿真>>结果验证>>FFT运算。 1、调用IP核 该IP核对应手册pg109_xfft.pd…...

网站推广团队/如何做网站优化

要克服http中无法点对点的客户端对客户之间的通信&#xff0c;就要使用websockets协议&#xff0c;而Python中早就有成熟的第三方库websocket,只需pip install websockets,而且官网文档写得非常好&#xff1a; https://websockets.readthedocs.io/en/stable/...

东莞网站建设推广/景区营销案例100例

一、深拷贝与浅拷贝 假设B复制了A,当修改了A,看B是否发生变化&#xff0c;如果B变化了&#xff0c;则是浅拷贝&#xff1b;如果B没变&#xff0c;就是深拷贝&#xff1b; c d {key:1} ,d{key:2} cd d修改了&#xff0c; c{key:2} c也变了&#xff0c;这就是浅拷…...

网站建设 APP/网站查询域名入口

调用程序&#xff1a; // 新轮廓 -> 调用轮廓扫描程序 private void toolStripMenuItem9_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start("E:\无锡福瑞达项目\TestApp\TestApp\bin\Release\TestApp.exe",&quo…...

拖式网站建设/今天合肥刚刚发生的重大新闻

我本身是一个写后台的程序员&#xff0c;对于前台不是很感冒。每每遇到一些前台的问题就容易让我头疼&#xff0c;需要花很长的时间来调节一些样式。这里我推荐使用LayUI这款前台框架&#xff0c;对于一些不太喜欢写前台的小伙伴有很大的帮助哦~ 废话不多说&#xff0c;上官网下…...

常熟做公司网站/整站seo技术搜索引擎优化

本文转载自&#xff1a;http://blog.csdn.net/m13666368773/article/details/8060481 一.正向代理 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器&#xff0c;这个代理服务器呢,他能访问那个我不能…...

咸阳网/什么是seo标题优化

试验网站#1搜索引擎优化收录情况记录(断续运行)日期Yahoogooglebaidusogou每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量2007-6-24288 333 1060 4813 2007-6-25164013523330108020481302007-6-26空间超过6月流量限制……&#xff0c;…...