Java基础进阶02-xml
目录
一、XML(可拓展标记语言)
1.学习网站:
2.作用
3.XML标签
4.XML语法
5.解析XML
(1)常见解析思想DOM
6.常见的解析工具
7.DOM4j的使用
8.文档约束
(1)概述
(2)分类
(3)DTD约束
(4)引入DTD约束
(5)DTD语法
①定义元素
②定义属性
(6)schema约束
①定义元素
②定义属性
(7)引入schema约束
(8)schema和DTD约束的区别
一、XML(可拓展标记语言)
1.学习网站:
https://www.w3schoo1.com.cn
-
标记语言:通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)
-
可扩展:标签的名字是可以自定义的
2.作用
-
用于进行存储数据和传输数据
-
作为软件的配置文件
3.XML标签
-
标签由一对尖括号和合法标识符组成 < user >
-
标签必须成对出现< user >< user/>
-
特殊的标签可以不成对,但是必须有结束标记< user/ >
-
标签中可以定义属性,属性和标签名空格隔开属性值必须用引号(单/双)引起来< user id = "100"/>
-
标签需要正确的嵌套
4.XML语法
-
后缀名为.xml
-
文档声明必须是第一行第一列
<?xmlversion="1.0”encoding="UTF-8" standalone= “yes”?> 其中 version属性必须存在 encoding属性不是必须的,作用:打开当前xml文件的时候应该是使用什么字符编码表(默认都是UTF-8) standalone属性不是必须的,作用:描述XML文件是否依赖其他的xml文件,取值为yes/no
-
必须存在根标签
-
XML文件中可以定义注释信息
-
XML文件中可以存在以下特殊字符
<-----------------小于 >-----------------大于 &----------------和号(&) '---------------单引号 "---------------引号
-
XML可以存在CDATA区
<![CDATA[ ...内容...]]>
5.解析XML
(1)常见解析思想DOM
-
DOM(DocumentObject Model)文档对象模型:
就是把文档的各个组成部分看做成对应的对象,会把xmI文件全部加载到内存在内存中形成一个树形结构,再获取对应的值
其中DOM对象主要有以下部分
-
Document对象:整个xml文档
-
Element对象:所有标签
-
Attribute对象:所有属性
-
Text对象:所有文本内容
其中Element,Attribute,Text有一个共同的父类:Node对象
6.常见的解析工具
-
JAXP:SUN公司提供的一套XML的解析的API
-
JDOM:开源组织提供了一套XML的解析的API-jdom
-
DOM4J:开源组织提供了一套XML的解析的API-dom4j
-
pull :主要应用在Android手机端解析XML
7.DOM4j的使用
首先下载jar包


xml文件
<?xml version="1.0" encoding="utf-8" ?>
<books><book id="1"><name>语文</name><versions>人教版</versions></book><book id="2"><name>数学</name><versions>人教版</versions></book><book id="3"><name>数学</name><versions>苏教版</versions></book><user id="1"><name>小明</name><studentID>1235354</studentID></user>
</books>
需求:
-
解析这个xmI文件
-
将解析到的Book标签数据封装到Book对象中并将其存储到ArrayList集合中
-
遍历集合
解析类:
public class Analysis {
public Document parseUrl(String url) throws DocumentException {SAXReader reader = new SAXReader();return reader.read(url);}public Document parseUrl(File file) throws DocumentException {SAXReader reader = new SAXReader();return reader.read(file);}
}
Book类
public class Book {private String name;private String version;private Long id;
public Book() {}
public Book(String name, String version, Long id) {this.name = name;this.version = version;this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getVersion() {return version;}
public void setVersion(String version) {this.version = version;}
public Long getId() {return id;}
public void setId(Long id) {this.id = id;}
@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", version='" + version + '\'' +", id=" + id +'}';}
}
测试类
public class Application {public static void main(String[] args) throws DocumentException {
File file = new File("reflection\\src\\xml\\bookstores.xml");Analysis analysis = new Analysis();Document document = analysis.parseUrl(file);
//获取根标签Element rootElement = document.getRootElement();//通过根标签获取book标签//无参elements()获取所有子标签List<Element> elements = rootElement.elements();System.out.println(elements.size());elements.forEach(book -> {System.out.println(book.getName());});
//有参elements(标签名)可以获取所有的指定子标签List<Element> books = rootElement.elements("book");System.out.println(books.size());
books.forEach(book -> {System.out.println("=====================================");//获取属性对应的属性值System.out.println(book.attribute("id").getValue());//获取该标签下的子标签book.elements("name").forEach(name -> {//获取标签体的内容System.out.println(name.getText());});
book.elements("version").forEach(v -> {//获取标签体的内容System.out.println(v.getText());});});System.out.println("------------------------------------");
//准备封装ArrayList<Book> bookArrayList = new ArrayList<>();books.forEach(book -> {Book book1 = new Book(book.element("name").getText(),book.element("version").getText(),Long.valueOf(book.attribute("id").getValue()));System.out.println(book1);bookArrayList.add(book1);});//最后检查"System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");bookArrayList.forEach(book -> System.out.println(book.toString()));
}
}
8.文档约束
(1)概述
用来限定xml文件中可使用的标签以及属性
(2)分类
-
DTD
-
schema
(3)DTD约束
-
创建一个文件,后缀名为.dtd
-
看xml文件中使用了哪些元素(<!ELEMENT>可以定义元素)
-
判断元素是简单元素还是复杂元素
-
简单元素:没有子元素
-
复杂元素:有子元素的
-


xml文件:下面的约束文档的xml内容
<?xml version="1.0" encoding="utf-8" ?>
<books><book id="1"><name>语文</name><versions>人教版</versions></book><book id="2"><name>数学</name><versions>人教版</versions></book><book id="3"><name>数学</name><versions>苏教版</versions></book>
</books>
需要掌握:
-
能在xml文件中引入dtd约束文档
-
能够简单阅读约束文档
-
能根据约束文档写xml文件
(4)引入DTD约束
方式一:引入本地dtd
<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行写入 <!DOCTYPE 根标签名字 SYSTEM(表示引入本地DTD) ‘DTD文件路径’>-->
<!DOCTYPE books SYSTEM 'restrain.dtd'>
方式二:在xml文件内部引入
<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行写入 <!DOCTYPE 根标签名字 [](表示内部引入dtd,[]内写约束内容)>-->
<!DOCTYPE books [] >
方式三:引入网络dtd
<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行写入 <!DOCTYPE 根标签名字 PUBLIC(表示引入网络DTD) “dtd文件名” “dtd文档的url”>-->
<!DOCTYPE books PUBLIC “dtd文件名” “dtd文档的url”>
(5)DTD语法
①定义元素
<!ELEMENT元素名 元素类型>
-
简单元素
-
EMPTY:表示标签体为空
-
ANY:表示标签体可以为空也可以不为空
-
PCDATA:表示该元素的内容部分为字符串
-
-
复杂元素
-
直接写子元素名称。
-
多个子元素可以使用”,“或者 ”|" 隔开;
-
” , ":表示定义子元素的顺序
-
”|”: 表示子元素只能出现任意一个
-
"?“:零次或一次
-
” + ":一次或多次
-
" * ":零次或多次;
-
如果不写则表示出现一次
-
-
-
②定义属性
<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
-
属性的类型
-
CDATA类型:普通的字符串
-
-
属性的约束:
-
#REQUIRED:属性是必须的
-
#IMPLIED:属性不是必需的
-
#FIXED value:属性值是固定的value值
-
DTD约束文件
<!--复杂元素-->
<!ELEMENT books (book+)>
<!ELEMENT book (name,version)>
<!--简单元素-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT version (#PCDATA)>
<!--定义属性-->
<!ATTLIST book id #PCDATA #IMPLIED>
(6)schema约束
①定义元素
-
创建一个文件,后缀名为.xsd
-
定义文档声明
-
schema文件的根标签为:< schema>
-
在< schema>中定义属性:xmIns=XML Schema
-
在根标签中定义属性:targetNamespace =唯一的url地址,用来指定当前这个schema文件的名称空间
-
在根标签定义属性:elementFormDefault="qualified,表示当前schema文件是一个质量良好的文件
-
通过element定义元素
-
判断当前元素是简单元素还是复杂元素
②定义属性
属性名 属性类型 属性的约束【required(必须的),optional(可选的)】
<attribute name="id" type="string"use="required"></attribute>
(7)引入schema约束
-
在根标签定义属性:xmIns="http://www.w3.org/2001/XMLSchema-instance
-
通过xmIns引入约束文件的名称空间
-
给某一个xmins属性添加一个标识,用于区分不同的名称空间,格式为:xmins:标识=“名称空间地址”,标识可以是任意的,但是一般取值都是xsi
-
通过xsi:schemaLocation指定名称空间所对应的约束文件,路径格式为:父 si:schemaLocation ="名称空间url 文件路径“
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="www.book_schema.cn"xsi:shemaLocation="www.book_shema.cn book_shema.xad"
>
根据上面xml写一个xsd文件
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="www.book_schema.cn"elementFormDefault="qualified">
<!-- element name = "根标签名"--><element name="books">
<!-- complexType表示当前标签是复杂的元素--><complexType><sequence>
<!-- 定义book复杂元素,maxOccurs:该标签最多出现的次数,unbounded是无限制--><element name="book" maxOccurs="unbounded"><complexType><sequence>
<!-- 定义简单元素--><element name="name" type="string"/><element name="version" type="string"/></sequence><attribute name="id" type="string" use="required"></attribute></complexType>
</element>
</sequence>
</complexType></element>
</schema>
(8)schema和DTD约束的区别
-
schema约束文件也是一个xml文件,符合xm的语法,这个文件的后缀名.xsd
-
一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
-
dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
-
schema语法更加的复杂

相关文章:
Java基础进阶02-xml
目录 一、XML(可拓展标记语言) 1.学习网站: 2.作用 3.XML标签 4.XML语法 5.解析XML (1)常见解析思想DOM 6.常见的解析工具 7.DOM4j的使用 8.文档约束 (1)概述 (2…...
《开始使用PyQT》 第01章 PyQT入门 03 用户界面介绍
03 用户界面介绍 《开始使用PyQT》 第01章 PyQT入门 03 用户界面介绍 The user interface (UI) has become a key part of our everyday lives, becoming the intermediary between us and our ever-growing number of machines. A UI is designed to facilitate in human-co…...
HTML-列表
列表 abbr: li : list item ol : orderd list ul : unordered list dl : definition list dt : definition title dd : definition description 1.有序列表(order list) 概念:有顺序或侧重顺序的列表 <h2>要把大象放冰箱总共分几步</h2> &…...
OceanBase创建租户
租户是集群之上的递进概念,OceanBase 数据库采用了多租户架构。 集群偏部署层面的物理概念,是 Zone 和节点的集合,租户则偏向于资源层面的逻辑概念,是在物理节点上划分的资源单元,可以指定其资源规格,包括…...
Java中Integer(127)==Integer(127)为True,Integer(128)==Integer(128)却为False,这是为什么?
文章目录 1.前言2. 源码解析3.总结 1.前言 相信大家职业生涯中或多或少的碰到过Java比较变态的笔试题,下面这道题目大家应该不陌生: Integer i 127; Integer j 127;Integer m 128; Integer n 128;System.out.println(i j); // 输出为 true System.o…...
【Unity】粒子贴图异常白边问题
从PS制作的黑底,白光的贴图。放入Unity粒子中,拉远看会有很严重的白边,像马赛克一样。 材质使用:Mobile/Particles/Additive 经测试只使用一张黑色的图片,也会有白边。 解决方案: 关闭黑色底…...
bxCAN接收处理
接收处理 为了接收 CAN 消息,提供了构成 FIFO(First Input First Output) 的三个邮箱。为了节约 CPU 负载,简化软件并保证数据一致性,FIFO 完全由硬件进行管理。应用程序通过 FIFO 输出邮箱访问 FIFO 中所存储的消息。 有效消息 当消息依据…...
前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展)
前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展) 常见的浏览器内核CSS选择器优先级盒子模型CSS硬件加速CSS扩展 常见的浏览器内核 内核描述Trident(IE内核)主要用在window系统中的IE浏览器中&…...
WEB前端标签的使用
图片标签 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><!-- img标签就是用来将图片显示在页面上的标签 --><img src"图片路径"><!-- 可用路径&#…...
739. 每日温度
提示给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: tempe…...
stm32F103C8T6简介及标准库和HAL库的区别
什么是单片机 单片机是一种集成电路芯片,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换电路、A\D转换器等电路)集成到一…...
操作系统(3)---操作系统引导
在安装操作系统后,磁盘的分布如下: C盘是这个磁盘的活动分区(又称主分区),安装了操作系统 开机过程如下: 1.计算机的主存由RAM和ROM组成,RAM关机数据消失,而ROM(Basic In…...
Vue3+Ts:实现paypal按钮
Vue3Ts:实现paypal按钮 一、前端页面按钮实现第一步:下载paypal.js依赖第二步:引入要使用的vue页面,并调用。 二、实现逻辑研究第一点:了解下Buttons自带的style属性第二点:了解下Buttons自带的处理方法第三…...
.[Decipher@mailfence.com].faust 勒索病毒数据怎么处理|数据解密恢复
尊敬的读者: 随着网络技术的发展,勒索病毒已经成为数字时代中一种极具破坏性的威胁。[support2022cock.li].faust [tsai.shenmailfence.com].faust [Encrypteddmailfence.com].faust[Deciphermailfence.com].faust 勒索病毒是其中的一种,它以…...
【UE Niagara】制作星光飘落效果
效果 步骤 1. 新建一个Niagara系统 选择模板“Fountain” 这里命名为“NS_Flare” 打开“NS_Flare”,选中Sprite渲染器,设置材质为上一篇文章中(【UE 材质】闪烁的星星材质)制作的材质“M_Flare” 2. 由于要在Niagara中调整粒子的…...
SLAM初学
昨天组长布置了任务,要求看香港大学的一篇论文,一打开,好家伙,纯英文,直接翻译着看 几个读不懂的概念: 体素:体素是三维空间中的体积像素的简称。它类似于二维图像中的像素,但在三…...
腾讯云轻量应用服务器Docker如何一键搭建属于自己的幻兽帕鲁服务器?
幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏,在帕鲁的世界,玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活,也…...
win10+elasticsearch8.12 安装教程
Elasticsearch是一种搜索引擎,本地安装完成之后,可使用其他编程语言(例如python)与elasticsearch建立连接,然后使用python脚本搜索elasticsearch中的数据 1下载 elasticsearch elasticsearch最新版官网下载链接 点击…...
经典面试题-死锁
目录 1.什么是死锁? 2.形成死锁的四个必要条件 3.死锁的三种情况 第一种情况: 举例: 举例: 第二种情况:两个线程 两把锁 举例: 第三种情况:N个线程 M把锁 哲学家进餐问题 1.什么是死锁&…...
mysql面试题合集-基础
前言 工作很忙,本质还是自己比较懒惰,很久没更新博客了。近期打算面试,换个工作环境,那就先从面试题开始吧,后续也会逐渐更新自己在工作中的一些经验感悟。接下来切入主题,由于长期做前台开发工作…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
