Java基础进阶02-xml

一、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文件中可以存在以下特殊字符

&lt;-----------------小于
&gt;-----------------大于
&amp;----------------和号(&)
&apos;---------------单引号
&quot;---------------引号
  • 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写一个DTD约束文件

<!ELEMENT books (book,user)>
<!ELEMENT book (name,version)>
<!ELEMENT user (name,studentID)>
​
<!ELEMENT studentID (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT version (#PCDATA)>

需要掌握:

  • 能在xml文件中引入dtd约束文档

  • 能够简单阅读约束文档

  • 能根据约束文档写xml文件

(4)引入约束

方式一:引入本地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值

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

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

相关文章

MySQL 8.3 发布, 它带来哪些新变化?

1月16号 MySQL 官方发布 8.3 创新版 和 8.0.36 长期支持版本 (该版本 没有新增功能&#xff0c;更多是修复bug )&#xff0c;本文基于 官方文档 说一下 8.3 版本带来的变化。 一 增加的特性 1.1 GTID_NEXT 支持增加 TAG 选项。 之前的版本中 GTID_NEXTUUID:number &#xff…

文件上传至Linux系统

文件上传 使用jsch库来建立一个SSH连接&#xff0c;然后通过该连接执行Linux命令来上传文件。 <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> <!--或者你项目中的最新版本…

使用IntelliJ IDEA快速搭建springboot 基础模板项目

使用IntelliJ IDEA快速搭建springboot 基础模板项目&#xff01;今天和大家分享一下&#xff0c;如何使用IntelliJ IDEA里面的maven插件&#xff0c;来快速搭建一个简单的Springboot基础项目。 第一步&#xff0c;菜单里面找到&#xff0c;文件-》新建-项目。如图。我们勾选了是…

ChatGPT用来润色论文\生成完整长篇论文\进行AI绘图,到底有多强大!!

​课程安排 学习内容 第一章 2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二章 OpenAI开发者大会后GPT最新技术 1.最新大模型GPT-4 Turbo详细介…

Spring Boot 整合 Camunda 实现工作流

工作流是我们开发企业应用几乎必备的一项功能&#xff0c;工作流引擎发展至今已经有非常多的产品。最近正好在接触Camunda&#xff0c;所以来做个简单的入门整合介绍。如果您也刚好在调研或者刚开始计划接入&#xff0c;希望本文对您有所帮助。如果您是一名Java开发或Spring框架…

【博客搭建记录贴】问题记录:hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。

1&#xff0c;背景 hexo&#xff08;博客框架&#xff09;安装完毕之后&#xff0c;正准备看看其版本&#xff0c;发现出现下面脚本禁止运行的错误。 PS C:\Users\PC> hexo -v hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1&#xff0c;因为在此系统上禁止运行脚…

第8章-网络设备文件管理

1. 网络设备的文件系统 1.1. 概述 1.2. 文件类型 1.3. 存储方式 1.4. 文件管理 2. 文件的管理 3. 网络设备软件维护基础 4. 常见问题 1. 网络设备的文件系统 1.1. 概述 ① 设备以文件的方式对运行所需的数据进行存储&#xff1b; ② Linux&#xff1b; 文件&#xff1a…

【Flink-1.17-教程】-【四】Flink DataStream API(5)转换算子(Transformation)【分流】

【Flink-1.17-教程】-【四】Flink DataStream API&#xff08;5&#xff09;转换算子&#xff08;Transformation&#xff09;【分流】 1&#xff09;使用 filter 简单实现2&#xff09;使用侧输出流实现 所谓“分流”&#xff0c;就是将一条数据流拆分成完全独立的两条、甚至多…

Nginx 代理服务路径带/和不带/的问题

nginx初始配置如下 server {listen 6087;location / {#网站主页路径。此路径仅供参考&#xff0c;具体请您按照实际目录操作。#例如&#xff0c;您的网站运行目录在/etc/www下&#xff0c;则填写/etc/www。#允许跨域请求的域&#xff0c;* 代表所有add_header Access-Control-…

AMIS的组件学习使用

部分代码片段 {"id": "filterForm","className": " xysd-zbkb-pubquery","labelWidth": 130,"body": [{"type": "grid","className": "xysd-grid-query-input","c…

第12章_集合框架(Collection接口,Iterator接口,List,Set,Map,Collections工具类)

文章目录 第12章_集合框架本章专题与脉络1. 集合框架概述1.1 生活中的容器1.2 数组的特点与弊端1.3 Java集合框架体系1.4 集合的使用场景 2. Collection接口及方法2.1 添加2.2 判断2.3 删除2.4 其它 3. Iterator(迭代器)接口3.1 Iterator接口3.2 迭代器的执行原理3.3 foreach循…

Android TP方向调试

一、问题描述 拿到一款新TP&#xff0c;适配好驱动后&#xff0c;触摸屏幕发现触摸点位置和Android报点位置不一致&#xff0c;如上滑变成下滑或者左滑右滑等 二、问题分析 1.加载TP驱动&#xff0c;且驱动能正确上报数据 2.使用命令打开触摸报点 settings put system show…

dolphinscheduler节点二次开发需要改动的部分

dolphinscheduler节点二次开发需要改动的部分 前端 在dolphinscheduler-ui/public/images/task-icons/目录下新增两个节点的logo图片&#xff0c;一个为激活状态的一个为非激活状态的&#xff0c;如下。 修改文件dolphinscheduler-ui/src/views/projects/task/constants/task…

实战:加密传输数据解密

前言 下面将分享一些实际的渗透测试经验&#xff0c;帮助你应对在测试中遇到的数据包内容加密的情况。我们将以实战为主&#xff0c;技巧为辅&#xff0c;进入逆向的大门。 技巧 开局先讲一下技巧&#xff0c;掌握好了技巧&#xff0c;方便逆向的时候可以更加快速的找到关键…

HCIE之BGP基础概念(一)

BGP 一、BGP的基本概述二、BGP分类三、BGP的工作原理BGP报文类型&#xff1a;BGP状态机&#xff1a; 四、BGP对等体之间的交互原则解决BGP路由黑洞方法&#xff1a; 五、路由反射器路由反射规则路由反射器下防环联邦 六、BGP属性特点优选协议首选值&#xff08;PrefVal&#xf…

Oracle 数据库恢复删除的数据

需求描述&#xff1a; 同事让删除脏数据&#xff0c;结果删错了&#xff0c;需要恢复数据 思路&#xff1a; 利用闪回恢复数据只能恢复15分钟之内的&#xff0c;后面undo空间会被重写&#xff0c;就恢复不了&#xff0c;所以删除数据后&#xff0c;要谨慎再三确认&#xff0c…

正弦量的有效值

正弦量的有效值 引言正文 引言 相信有很多小伙伴们还记得&#xff0c;初中学习电压电流的时候&#xff0c;对于交变电流&#xff0c;电压&#xff0c;其有效值为正弦信号的最大值除以 1 2 \cfrac{1}{\sqrt{2}} 2 ​1​。 具体推到过程&#xff0c;作者以后有时间了会进行添加…

ESP8266 PlatformIO Arduino中为墨水屏制作u8g2自定义字库

Content 0. 前言1. 工具下载2. 字体下载3. 开始转换4. 添进字库0. 前言 使用的是 U8g2_for_Adafruit_GFX 字库,兴许你会在其他地方遇见更中意的字体,现在我们将它添加进去。 操作系统:Windows10 专业版 1. 工具下载 使用开源的 u8g2FontTool 软件,下载完成后解压。 资…

PHP编程实践:实际商品价格数据采集

引言 在电子商务领域&#xff0c;对商品价格进行数据采集和对比是一项常见的需求。本文将介绍如何使用PHP编程语言实现对1688和淘宝商品价格数据的采集和对比&#xff0c;帮助读者了解实际的编程实践过程。 一、数据采集原理 数据采集是指从互联网上获取数据的过程&#xff…

学习理解Java工厂模式

学习理解Java工厂模式 一、前言二、简单工程模式三、工厂方法模式四、抽象工厂模式五、静态工厂模式和 new 有什么区别&#xff1f;六、总结 一、前言 工厂模式目的是封装对象的创建过程&#xff0c;将对象的创建和使用分离开来&#xff0c;从而提高代码的可维护性和可扩展性。…