【Java】Java核心 73:XML (中)

news2024/9/24 1:16:29

文章目录

      • 5 XML的组成:字符区(了解)
      • **6** **DTD约束(能够看懂即可)**
        • **1** **什么是DTD**
        • **2** **DTD约束的实现和语法规则(看懂dtd约束,书写符合规范的xml文件)**


在这里插入图片描述

5 XML的组成:字符区(了解)

当大量的转义字符出现在xml文档中时,会使XML文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。

CDATA (Character Data)字符数据区,格式如下:

<![CDATA[
	文本数据   < >  & ; " "
]]>
  1. CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)
  2. CDATA 部分由 <![CDATA[开始,由 ]]> 结束;

例如:

<![CDATA[
    if salary < 1000 then
]]

快捷模板:CD 回车

在这里插入图片描述

注意:

​ CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。

​ 标记 CDATA 部分结尾的 “]]>” 不能包含空格或折行。

小结:

  • 字符区的特点:
    • 原样显示(书写的内容不会被xml解析器解析)

6 DTD约束(能够看懂即可)

1 什么是DTD

DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

2 DTD约束的实现和语法规则(看懂dtd约束,书写符合规范的xml文件)

开发中,我们不会自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。

需求:接下来我们创建一个dtd约束文档,然后按照约束文档书写符合规范的xml文件。

我们先新建一个books.xml文件。

第一步:在项目下面创建一个dtd的文件夹,然后选中文件夹,鼠标右击,新创键一个books.xml文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oTtoRvkX-1687767096552)(imgs\8.bmp)]

第二步:我们先书写books.xml文件中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book>
		<name>面试宝典</name>
		<author>锁哥</author>
		<price>78.8</price>
	</book>
	<book>
		<name>java从入门到精通</name>
		<author>黑旋风</author>
		<price>88.8</price>
	</book>
</books>

经过上述四步我们就将books.xml文件书写完毕,接下来我们开始书写DTD约束。

关于DTD约束我们能够看懂即可。如下所示就是上述books.xml文件引入了DTD约束。

简单的DTD约束就写好了,如下所示:

我们直接将如下约束复制到我们上述书写好的books.xml文件中即可,能够读懂即可。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
	1.在xml内部定义dtd约束的声明 : <!DOCTYPE 根元素 [元素声明]>
	2.xml的元素(标签)的声明: <!ELEMENT 元素名称 (元素内容)>
		<!ELEMENT books (book)> 表示books标签下是book标签
	    <!ELEMENT book (name,author,price)> 表示的是book标签下出现的name,author,price子标签
	    <!ELEMENT name (#PCDATA)> 表示name标签中出现的内容是文本
 -->
 <!DOCTYPE books [
 	<!--约束根标签 book* 表示books标签下可以有多个book子标签
 		* + ? 和正则表达式中表示的意思是一样的
		* :  0 1 n
		+ : 1 n
		? :  0 1
 	-->
 	<!ELEMENT books (book*)>
 	<!--约束book标签-->
 	<!ELEMENT book (name,author,price)>
 	<!--约束name,author,price标签 
 		但是这三个标签下就是文本了
 		#PCDATA 表示标签下内容是文本
 	-->
 	<!ELEMENT name (#PCDATA)>
 	<!ELEMENT author (#PCDATA)>
 	<!ELEMENT price (#PCDATA)>
 ]>
<books>
	<book>
		<name>面试宝典</name>
		<author>锁哥</author>
		<price>78.8</price>
	</book>
	<book>
		<name>java从入门到精通</name>
		<author>黑旋风</author>
		<price>88.8</price>
	</book>
</books>

说明:

1)xml中出现的标签,也叫做元素。那么我们书写的约束可以规范xml中到底能出现哪些标签。除此之外都不能出现。

所以xml中出现的标签都需要我们开发者在dtd约束中声明一下。只有声明了这个标签,xml中才能出现这个标签。如果约束中没有声明,那么xml中就不能出现。

所以,xml中出现的标签需要使用如下的语法(也就是xml中元素的声明语法)。

在xml内部定义dtd约束的声明 :

 <!DOCTYPE 根元素 [元素声明]>

xml的元素(标签)的声明:

<!ELEMENT 元素名称 (元素内容)>

元素名:自定义。

元素内容包括:符号、数据类型和标签。

常见符号:? * + () |

常见数据类型:#PCDATA 表示内容是文本,不能是子标签。

标签:就是正常子标签。

2)由于 <!ELEMENT book (name,author,price)> 顺序是name,author,price,所以下面的顺序也得是:

<book>
		<name>面试宝典</name>
		<author>锁哥</author>
		<price>78.8</price>
</book>

前后顺序不能换。

接下来对上述代码的标签添加属性,比如给book属性添加一个address地址,表示将书存放到哪里。

添加属性之后的代码如下所示:

<!DOCTYPE books [
 	<!--约束根标签 book* 表示books标签下可以有多个book子标签
 		* + ? 和正则表达式中表示的意思是一样的
 	-->
 	<!ELEMENT books (book*)>
 	<!--约束book标签-->
 	<!ELEMENT book (name,author,price)>
 	<!--约束name,author,price标签 
 		但是这三个标签下就是文本了
 		#PCDATA 表示标签下内容是文本
 	-->
 	<!ELEMENT name (#PCDATA)>
 	<!ELEMENT author (#PCDATA)>
 	<!ELEMENT price (#PCDATA)>
 	<!ATTLIST book address CDATA "图书馆"
 					id      ID    #REQUIRED
 			>
 ]>
<books>
	<book address="藏经阁" id="a1">
		<name>面试宝典</name>
		<author>锁哥</author>
		<price>78.8</price>
	</book>
	<book id="a2">
		<name>java从入门到精通</name>
		<author>黑旋风</author>
		<price>88.8</price>
	</book>
</books>

对上述声明属性进行解释说明:

元素名称: 表示该属性使用在哪个标签上;

属性名称: 表示在标签上添加的属性名字;

属性类型: 添加的属性类型。

属性类型有如下几种:

​ 类型 描述

CDATA 值为字符数据 (character data)

​ (en1|en2|…) 此值是枚举列表中的一个值

ID 值为唯一的 id

默认值: 表示最开始给属性的默认值。

​ 值 解释

​ 值 属性的默认值

#REQUIRED 属性值是必需的

​ #IMPLIED 属性不是必需的

​ #FIXED value 属性值是固定的



在这里插入图片描述

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

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

相关文章

MATLAB随机打乱矩阵(按行或列)

1、重新排列矩阵各行 a [1 2;3 4;5 6;7 8]; rowrank randperm(size(a, 1)); % size获得a的行数&#xff0c;randperm打乱各行的顺序 a1 a(rowrank,:) % 按照rowrank重新排列各行&#xff0c;注意rowrank的位置2、重新排列矩阵各列 b [1 3 5 7;2 4 6 8 ]; r…

【AntDB数据库】AntDB数据库整体架构

整体架构 AntDB包括计算节点(Coordinator)、数据节点(DB)、全局事务管理器&#xff08;GTM&#xff09;和管理节点四种组件&#xff0c;其中GTM和DB为有状态的组件&#xff0c;需要考虑高可用&#xff0c;架构如下图&#xff1a; 计算节点(Coordinator)&#xff1a;提供SQL解…

ffmpeg dec中AVCodecHWConfigInternal在那里使用

在做ffmpeg decode插件的时候&#xff0c;发现需要增加一个AVCodecHWConfigInternal数组&#xff0c; //就是这个数组 static const AVCodecHWConfigInternal *efcodec_hw_configs[] {&(const AVCodecHWConfigInternal) {.public {.pix_fmt AV_PIX_FMT_EFCCODEC,.me…

Jupyter notebook运行环境创建

进入到jupyter notebook,没找到自己之前创建的环境xzc_pytorch 进入到Anaconda prompt,输入如下命令 (xzc_pytorch) C:\Users\xzc> conda install ipykernel安装完后&#xff0c;重启jupyter notebook发现还是没有 &#xff0c;此时选择手动创建&#xff0c;在base环境下执…

【Nginx】第四章 Nginx配置实例-反向代理

4.1 反向代理实例一 实现效果&#xff1a;使用nginx反向代理&#xff0c;访问 www.123.com 直接跳转到localhost:8080 4.1.1 实验准备工作 启动一个 tomcat&#xff0c;浏览器地址栏输入 localhost:8080&#xff0c;出现如下界面 在liunx系统安装tomcat&#xff0c;使用默认…

【运维部署】亚马逊云服务器安装后通过Xhell远程登录提示“所选的用户密钥未在远程主机上注册。请再试一次”

这里写自定义目录标题 背景解决方案第一步 确认配置第二步 确认权限方案C 背景 最新亚马逊云服务准备扩容&#xff0c;新建了一台Ubuntu服务器&#xff0c;密钥对使用原来服务器上的密钥对&#xff0c;创建后直接迁移到了新的服务器上。 通过 less .ssh/authorized_keys 可以查…

【Rust】1、实战:语法和数据结构、生命周期-所有权-借用、自制 CPU、内存

文章目录 一、概述1.1 安全性1.1.1 垂悬指针1.1.2 数据竞争1.1.3 迭代器失效 1.2 性能1.3 vscode 設置 二、基础语法2.1 循环2.2 引用2.3 生命周期2.4 泛型2.5 实战grep项目2.6 数组2.6.1 数组和切片2.6.2 动态数组2.6.3 初始化 2.7 包含第三方库2.8 命令行参数2.9 读文件2.9.1…

Python零基础入门(六)——超详细的字符串与正则表达式

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python入门专栏&#xff1a;《Python入门》欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; 码字不易&#xff0c;如果觉得文章不…

基于java的汽车服务管理系统(Car Service Management System)

设计一款基于java的管理和跟踪对车辆所做服务的系统。我们的系统允许服务技术人员跟踪客户、他们的车辆以及对这些车辆所做的服务。 需要项目的朋友私信我&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; Car Service Management System 基本的使用…

【OpenCV • c++】颜色数据结构与颜色空间转换

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【OpenCV • c】计算机视觉&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff…

chatgpt赋能python:Python:一个值得花钱学习的编程语言

Python&#xff1a;一个值得花钱学习的编程语言 近年来&#xff0c;Python成为了一款备受欢迎的编程语言&#xff0c;尤其在数据科学、人工智能等领域表现出色。许多人开始进入Python编程领域&#xff0c;而且Python培训课程也爆发式增长。但是&#xff0c;一些人对于Python的…

react中基于腾讯云cos上传图片组件

react中基于腾讯云cos上传图片组件 效果示例图上传图片组件imageUploadcomponents/imageUpload/index.jsxcomponents/imageUpload/upload.scss 使用组件 效果示例图 上传图片组件imageUpload npm install cos-js-sdk-v5 -S components/imageUpload/index.jsx import ".…

Mac 打开/关闭 iCloud 后导致桌面文件夹、文档删除,恢复步骤!

不小心打开/关闭了 iCloud 后&#xff0c;导致桌面内容全部丢失&#xff0c;再次打开同步&#xff0c;发现还是确实很多内容&#xff0c;如何找回最初的文件副本。 当 iCloud 关闭时&#xff0c;会将任何未上传到 iCloud 云盘的文稿内容转移打包放到当前 Mac 电脑的个人文件夹…

ChatGPT批量生成文章软件:助力创作高效快捷文章

随着人工智能技术的不断发展&#xff0c;ChatGPT批量生成文章软件已经成为了一种强大的创作工具。它能够通过自然语言处理和机器学习算法&#xff0c;快速生成高质量的文章&#xff0c;为创作者提供了高效快捷的创作体验。本文将从随机8-20个方面对ChatGPT批量生成文章软件进行…

【从零开始学习JAVA | 第二十一篇】常见API介绍 System

目录 前言&#xff1a; System&#xff1a; System类中静态方法&#xff1a; 总结&#xff1a; 前言&#xff1a; system 是一个很底层的 API&#xff0c;是一个工具类&#xff0c;提供了一些与系统相关的方法。他在我们写项目的时候提供了一些非常实用的方法&#xff0c;本…

基于Filebeat+Kafka+ELK实现Nginx日志收集并采用Elastalert2实现钉钉告警

目录 基于FilebeatKafkaELK实现Nginx日志收集1.规划好项目架构图2.部署前端web集群3.部署ES集群集群介绍环境准备集群搭建分片和副本 4.部署kafka集群环境准备静态IP配置重启网络服务域名解析设置安装时间同步服务关闭防火墙和selinux kafka集群依赖于zookeeperkafaka和zookeep…

8 系统定时器(Systick)

目录 系统定时器&#xff08;Systick&#xff09; SysTick定时器特性介绍 SysTick定时器的功能 SysTick定时器寄存器介绍 Systick定时器的使用 系统定时器&#xff08;Systick&#xff09; SysTick定时器特性介绍 计数宽度&#xff1a; 24bit来存储数据&#xff0c;2^24…

HOT21-搜索二维矩阵II

leetcode原题链接&#xff1a; 搜索二维矩阵II 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[…

【CSS3系列】第八章 · 伸缩盒模型

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

基于matlab使用深度学习的语义分割算法实现(附源码)

一、前言 此示例演示如何使用语义分割网络对图像进行分割。 语义分割网络对图像中的每个像素进行分类&#xff0c;从而生成按类分割的图像。语义分割的应用包括自动驾驶的道路分割和医疗诊断的癌细胞分割。 此示例首先向您展示如何使用预训练的 Deeplab v3 [1] 网络分割图像&am…