【JavaSE】Java基础语法(四十四):XML解析

news2024/11/19 5:38:13

文章目录

  • 1. 概述
  • 2.标签的规则
  • 3. 语法规则【应用】
  • 4. xml解析【应用】



在这里插入图片描述


1. 概述

  • 万维网联盟(W3C)
    万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。
    建立者: Tim Berners-Lee (蒂姆·伯纳斯·李)。
    是Web技术领域最具权威和影响力的国际中立性技术标准机构。
    到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南,
    - 如广为业界采用的超文本标记语言HTML(标准通用标记语言下的一个应用)
    - 可扩展标记语言XML(标准通用标记语言下的一个子集)
    - 以及帮助残障人士有效获得Web信息的无障碍指南(WCAG)等

  • xml概述
    XML的全称为(EXtensible Markup Language),是一种可扩展的标记语言
    标记语言: 通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)
    可扩展:标签的名字是可以自定义的,XML文件是由很多标签组成的,而标签名是可以自定义的

  • 作用
    - 用于进行存储数据和传输数据
    - 作为软件的配置文件

  • 作为配置文件的优势
    - 可读性好
    - 可维护性高


2.标签的规则

  • 标签由一对尖括号和合法标识符组成

    <student>
    
  • 标签必须成对出现

    <student> </student>
    前边的是开始标签,后边的是结束标签
    
  • 特殊的标签可以不成对,但是必须有结束标记

    <address/>
    
  • 标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来

    <student id="1"> </student>
    
  • 标签需要正确的嵌套

    这是正确的: <student id="1"> <name>张三</name> </student>
    这是错误的: <student id="1"><name>张三</student></name>
    

3. 语法规则【应用】

  • 语法规则

    • XML文件的后缀名为:xml
    • 文档声明必须是第一行第一列
      version:该属性是必须存在的
      encoding:该属性不是必须的
      打开当前xml文件的时候应该是使用什么字符编码表(一般取值都是UTF-8)
      standalone: 该属性不是必须的,描述XML文件是否依赖其他的xml文件,取值为yes/no
    • 必须存在一个根标签,有且只能有一个
    • XML文件中可以定义注释信息
    • XML文件中可以存在以下特殊字符
      &lt; < 小于
      &gt; > 大于
      &amp; & 和号
      &apos; ' 单引号
      &quot; " 引号
      
    • XML文件中可以存在CDATA区
  • 示例代码

    <?xml version="1.0" encoding="UTF-8" ?>
    <!--注释的内容-->
    <!--本xml文件用来描述多个学生信息-->
    <students>
    <!--第一个学生信息-->
    <student id="1">
    <name>张三</name>
    <age>23</age>
    <info>学生&lt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;的信息
    </info>
    <message> <![CDATA[内容 <<<<<< >>>>>> ]]]></message>
    </student>
    <!--第二个学生信息-->
    <student id="2">
    <name>李四</name>
    <age>24</age>
    </student>
    </students>
    

4. xml解析【应用】

  • 概述
    xml解析就是从xml中获取到数据

  • 常见的解析思想
    DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。
    会把xml文件全部加载到内存,在内存中形成一个树形结构,再获取对应的值

在这里插入图片描述

  • 常见的解析工具
    • JAXP: SUN公司提供的一套XML的解析的API
    • JDOM: 开源组织提供了一套XML的解析的API-jdom
    • DOM4J: 开源组织提供了一套XML的解析的API-dom4j,全称:Dom For Java
    • pull: 主要应用在Android手机端解析XML

  • 解析的准备工作

    1. 我们可以通过网站:https://dom4j.github.io/ 去下载dom4j
      今天的资料中已经提供,我们不用再单独下载了,直接使用即可
    2. 将提供好的dom4j-1.6.1.zip解压,找到里面的dom4j-1.6.1.jar
    3. 在idea中当前模块下新建一个libs文件夹,将jar包复制到文件夹中
    4. 选中jar包 -> 右键 -> 选择add as library即可
  • 需求
    - 解析提供好的xml文件
    - 将解析到的数据封装到学生对象中
    - 并将学生对象存储到ArrayList集合中
    - 遍历集合

  • 代码实现

<?xml version="1.0" encoding="UTF-8" ?>
<!--注释的内容-->
<!--本xml文件用来描述多个学生信息-->
<students>
	<!--第一个学生信息-->
	<student id="1">
		<name>张三</name>
		<age>23</age>
	</student>
	<!--第二个学生信息-->
	<student id="2">
		<name>李四</name>
		<age>24</age>
	</student>
</students>
public class Student {
	private String id;
	private String name;
	private int age;
	
	public Student() {
	}
	
	public Student(String id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}
	
	public String getId() {
		return id;
	}
	
	public void setId(String id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "Student{" +
		"id='" + id + '\'' +
		", name='" + name + '\'' +
		", age=" + age +
		'}';
	}
}
/**
* 利用dom4j解析xml文件
*/
public class XmlParse {
	public static void main(String[] args) throws DocumentException {
		//1.获取一个解析器对象
		SAXReader saxReader = new SAXReader();
		//2.利用解析器把xml文件加载到内存中,并返回一个文档对象
		Document document = saxReader.read(new
		File("myxml\\xml\\student.xml"));
		//3.获取到根标签
		Element rootElement = document.getRootElement();
		//4.通过根标签来获取student标签
		//elements():可以获取调用者所有的子标签.会把这些子标签放到一个集合中返回.
		//elements("标签名"):可以获取调用者所有的指定的子标签,会把这些子标签放到一个集
		合中并返回
		//List list = rootElement.elements();
		List<Element> studentElements = rootElement.elements("student");
		//System.out.println(list.size());
		//用来装学生对象
		ArrayList<Student> list = new ArrayList<>();
		//5.遍历集合,得到每一个student标签
		for (Element element : studentElements) {
			//element依次表示每一个student标签
			//获取id这个属性
			Attribute attribute = element.attribute("id");
			//获取id的属性值
			String id = attribute.getValue();
			//获取name标签
			//element("标签名"):获取调用者指定的子标签
			Element nameElement = element.element("name");
			//获取这个标签的标签体内容
			String name = nameElement.getText();
			//获取age标签
			Element ageElement = element.element("age");
			//获取age标签的标签体内容
			String age = ageElement.getText();
			// System.out.println(id);
			// System.out.println(name);
			// System.out.println(age);
			Student s = new Student(id,name,Integer.parseInt(age));
			list.add(s);
		}
		//遍历操作
		for (Student student : list) {
			System.out.println(student);
		}
	}
}

在这里插入图片描述

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

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

相关文章

【分布族谱】高斯分布和逆高斯分布的关系

文章目录 高斯分布逆高斯分布简介通过高斯分布构造逆高斯分布 高斯分布 正态分布&#xff0c;又称Gauss分布&#xff0c;其概率密度函数入下图所示 正态分布 N ( μ , σ ) N(\mu, \sigma) N(μ,σ)受到期望 μ \mu μ和方差 σ 2 \sigma^2 σ2的调控&#xff0c;其概率密度函…

基于SpringBoot+Vue的医疗服务系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

Qt for Android环境配置(联合Android Studio)

目录 1.安装JDK2.安装Android Studio并下载必要组件3.安装QtCreator并配置 Official Doc 1.安装JDK Oracle JDK Download 配置环境变量&#xff1a; 2.安装Android Studio并下载必要组件 Android Studio Download 下图中&#xff0c;31.0.0是当前Qt必需的&#xff0c;3…

chatgpt赋能python:Python制作抽奖——让你的活动更有趣

Python制作抽奖——让你的活动更有趣 在活动中&#xff0c;抽奖环节常常是一大亮点。而用Python制作抽奖程序&#xff0c;则可以更灵活、更实用地完成这个环节。接下来我们将介绍Python制作抽奖的方法&#xff0c;并且说明如何让你的抽奖环节更加有趣。 Python制作抽奖的方法…

【Linux网络服务】Nginx优化

Nginx网页优化 一、配置Nginx网页缓存时间1.1设置方法 二、隐藏Nginx版本号2.1方法一&#xff1a;修改配置文件2.2方法二&#xff1a;修改源码文件&#xff0c;重新编译 三、修改用户与组四、日志切割五、连接超时六、更改进程数七、网页压缩八、配置防盗链九、Linux内核参数优…

华为OD机试真题 Java 实现【素数之积】【2022Q4 100分】

一、题目描述 RSA加密算法在网络安全世界中无处不在&#xff0c;它利用了极大整数因数分解的困难度&#xff0c;数据越大&#xff0c;安全系数越高。 给定一个32位正整数&#xff0c;请对其进行因数分解&#xff0c;找出是哪两个素数的乘积。 二、输入描述 一个正整数num …

基于物理信息的神经网络(Physics-informed Neural Networks;PINNs)Part-1(简单介绍)

【摘要】 基于物理信息的神经网络&#xff08;Physics-informed Neural Networks&#xff0c;简称PINNs&#xff09;&#xff0c;是一类用于解决有监督学习任务的神经网络&#xff0c;它不仅能够像传统神经网络一样学习到训练数据样本的分布规律&#xff0c;而且能够学习到数学…

段的概念-汇编复习(3)

本文小节讨论内容&#xff1a;"段地址x16偏移地址物理地址”的本质含义,段 的 概 念 "段地址x16偏移地址物理地址”的本质含义 注意&#xff0c;这里讨论的是 8086CPU 段地址和偏移地址的本质含义&#xff0c;而不是为了解决具体的问题而在本质含义之上引申出来的更…

Node.js基本概念、特点、用途和常用模块,以及Express框架开发一个web应用

目录 一、Node.js的基本概念和特点 二、Node.js的用途 三、Node.js的常用模块 四、使用Node.js进行Web开发 1. 安装Node.js 2. PyCharm配置Node.js 3. 使用http库编写一个web服务 4. 使用Express框架构建Web应用程序 5. 调试代码 6. 发布应用程序 参考文章 Node.js是…

[转载]Nginx 使用 X-Accel-Redirect 实现静态文件下载的统计、鉴权、防盗链、限速等

需求 统计静态文件的下载次数&#xff1b;判断用户是否有下载权限&#xff1b;根据用户指定下载速度&#xff1b;根据Referer判断是否需要防盗链&#xff1b;根据用户属性限制下载速度&#xff1b; X-Accel-Redirect This allows you to handle authentication, logging or …

基于vue3全新后台管理方案vite4+vue3+pinia2+vue-i18n

Vite4-Admin 基于 vue3vite4.xpinia2vue-router4 构建后台管理系统。 支持vue-i18n国际化多语言、动态路由鉴权、4种布局模板及tab页面缓存等功能。 技术框架 编码器&#xff1a;VScode框架技术&#xff1a;vite4vue3piniavue-routerUI组件库&#xff1a;ve-plus (基于vue3自研…

PHP快速实战19-PHP使用IMAP获取QQ邮箱的收件列表及内容

文章目录 前言关于IMAP协议安裝与实现步骤1&#xff1a;安装IAMP扩展1.1 检查IMAP是否已安装1.2 安装IMAP扩展1.3 启用IMAP扩展1.4 重启服务 步骤2&#xff1a;开始功能实现2.1 开始编码2.2 代码执行 常见的20个PHP中IMAP方法总结 前言 本文已收录于PHP全栈系列专栏&#xff1…

详解js中的浅拷贝与深拷贝

详解js中的浅拷贝与深拷贝 1、前言1.1 栈&#xff08;stack&#xff09;和堆&#xff08;heap&#xff09;1.2 基本数据类型和引用数据类型1.2.1 概念1.2.2 区别1.2.3 基本类型赋值方式1.2.4 引用类型赋值方式 2、浅拷贝2.1 概念2.2 常见的浅拷贝方法2.2.1 Object.assign()2.2.…

25 strlen 的调试

前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 字符串长度的计算 不过 我们这里是从 具体的实现 来看一下 它的实现 主要是使用 汇编 来进行实现的, 因此 理解需要一定的基础 测试用例 就是简单的使用了一下 strc…

Vscode搭建开发调试STM32/RISC-V环境IDE(最全面)

单片机开发IDE环境如KeilMDK&#xff0c;虽然操作简单&#xff0c;方便调试。但就是代码编辑风格很老套&#xff0c;中文符号乱码还是常有的事。而如今流行的vscode编辑器很不错&#xff0c;免费且相当轻量级&#xff0c;用来代码开发体验很不错&#xff0c;看着都舒服。Clion …

【数学建模实例之SEIR】

学习数学建模: 从基础到实践 引言 在我们日常生活中&#xff0c;数学建模&#xff08;Mathematical Modeling&#xff09;是一个非常重要的工具&#xff0c;它帮助我们理解复杂的问题&#xff0c;并找到解决这些问题的方法。在这篇博客中&#xff0c;我们将探讨数学建模的基本…

深入理解计算机系统——汇编基础

文章目录 寄存器数据格式mov操作 push&#xff0c;popcall&#xff0c;retleave,enter算术和逻辑操作一元操作二元操作移位操作 特殊的算术操作控制条件码访问条件码跳转很好的例题 翻译条件分支循环条件传送指令switch例 函数堆栈递归的过程 数组数据结构结构体联合 使用GDB调…

信息与编码SCUEC DDDD 期末复习整理(1)

1.1948年&#xff0c;美国数学家香农发表了题为“通信的数学原理”的论文&#xff0c;从而创立了信息论。 2.不可能事件的自信息量是&#xff08;∞&#xff09;&#xff0c;必然事件的自信息量是&#xff08;0&#xff09; 3. 4.差错控制的主要方式有前向纠错方式FEC&#x…

线程的创建(Runnable,Future,CompletionService,CompletableFuture的辨析)

直接使用Thread 直接让某个类继承Thread类&#xff0c;复写run方法&#xff0c;外部调用的时候直接调用start方法。 因为java的单继承模式&#xff0c;但是我们一般不直接使用这种方法。 使用Runnable Slf4j public class MyTask implements Runnable {Overridepublic void …

Vue+springboot餐厅美食菜品评价系统4d5g9

餐厅是一个传统的行业。随着当今社会的发展&#xff0c;时代的进步&#xff0c;行业也在发生着变化&#xff0c;单就点菜这一方面&#xff0c;菜品评价正在逐步进入人们的生活。传统的菜品评价&#xff0c;不仅会耗费大量的人力、时间&#xff0c;有时候还会出错。网上可以解决…