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面试题合集-基础
前言 工作很忙,本质还是自己比较懒惰,很久没更新博客了。近期打算面试,换个工作环境,那就先从面试题开始吧,后续也会逐渐更新自己在工作中的一些经验感悟。接下来切入主题,由于长期做前台开发工作…...
 
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
 
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
 
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
 
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
 
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
