XML详解

XML

简介

  • 概述:Extensible Markup Language 可扩展标记语言

    • 可扩展:标签都是自定义的。
  • 功能

    1. 数据存储:XML 可以用来存储结构化数据,包括文本、数字、日期等各种类型的数据
    2. 数据交换:XML 可以作为一种通用的数据交换格式,用于在不同系统之间传递数据
    3. 数据描述:XML 可以用来描述数据的结构和内容,例如通过定义 XML Schema 或 DTD 来定义数据的格式和约束
    4. 数据传输:XML 可以用作Web服务中的数据传输格式,例如 SOAP 协议中的消息体通常使用 XML 格式
    5. 数据显示:XML 可以用来描述数据的呈现方式,例如通过 XSLT 样式表将 XML 数据转换成 HTML 或其他格式进行显示
    6. 数据查询:XML 可以通过 XPath 或 XQuery 进行数据的查询和检索
    7. 数据验证:XML 可以通过 XML Schema 或 DTD 对数据进行验证,确保数据的格式和内容符合预期
  • XML 和 HTML 的区别

    1. xml标签都是自定义的,html标签是预定义
    2. xml的语法严格,html语法松散
    3. xml是存储数据的,html是展示数据

语法

  • 基本语法

    1. xml文档的后缀名 .xml
    2. xml第一行必须定义为文档声明
    3. xml文档中有且仅有一个根标签
    4. 属性值必须使用引号(单双都可)引起来
    5. 标签必须正确关闭
    6. xml标签名称区分大小写
  • 快速入门,示例代码

    <?xml version='1.0' ?>							// 文档声明
    <users>
    	<user id='1'>
            <name>小刚</name>
            <age>23</age>	
            <gender>man</gender>
        </user>
        <user id='2'>
        	<name>小红</name>
            <age>24</age>
            <gender>woman</gender>
        </user>
    </users>
    
  • 组成部分

    • 文档声明
    // 格式
    <?xml 属性列表 ?>
    

    属性列表

    1、version:版本号,必须的属性

    2、encoding:编码方式,告知解析引擎当前文档使用的字符集,默认,ISO-8859-1

    3、standalone:是否独立,取值 yes-不依赖其他文件 no-依赖其他文件

    • 指令:用来引入 CSS
    <?xml-stylesheet type="text/css" href="a.css" ?>
    
    • 标签:标签名称自定义
    标签自定义规则
    1、名称可以包含字母、数字以及其他的字符
    2、名称不能以字母 xml(或者 XML、Xml 等等)开始
    3、名称不能包含空格
    • 属性:id 属性值唯一
    • 文本:CDATA区,在该区域中的数据会被原样展示
    格式
    <![CDATA[数据]]>

约束

  • 概述:规定 xml 文档的书写规则

  • 作为框架的使用者(程序员)

    • 能够在xml中引入约束文档
    • 能够简单的读懂约束文档
  • 约束分类

    • DTD:一种简单的约束技术
    • Schema:一种复杂的约束技术

DTD
  • 分类

    • 内部 DTD:将约束规则定义在 XML 文档中
    • 外部 DTD:将约束规则定义在外部的 DTD 文件中
  • 引入方式

    位置引入格式
    本地
    网络
  • 代码示例

    <!ELEMENT students (student*) >			#定义了一个students的元素,包含0个或多个student元素
    <!ELEMENT student (name,age,sex)>		#定义了一个student元素,包含name、age、sex等子元素
    <!ELEMENT name (#PCDATA)>				#定义了一个名为name的元素,其内容为文本数据
    <!ELEMENT age (#PCDATA)>				#定义了一个名为age的元素,其内容为文本数据
    <!ELEMENT sex (#PCDATA)>				#定义了一个名为sex的元素,其内容为文本数据
    <!ATTLIST student number ID #REQUIRED>	#定义了一个名为number的属性,类型为ID,且必须存在
    
    <?xml version='1.0' ?>
    <!DOCTYPE students SYSTEM "student.dtd">
    <students>
     <student number="s1">
         <name>李四</name>
         <age>23</age>
         <sex></sex>
     </student>
    </students>
    

    注意:上述第一个是 DTD 文档约束,第二个是 XML 文档


Schema
  • 引入步骤

    1. 填写xml文档的根元素
    2. 引入xsi前缀. xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
    3. 引入xsd文件命名空间. xsi:schemaLocation=“http://www.itcast.cn/xml student.xsd”
    4. 为每一个xsd约束声明一个前缀,作为标识 xmlns=“http://www.itcast.cn/xml”
  • 代码示例

    <students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    		   xmlns="http://www.itcast.cn/xml"
    		   xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd">
    

解析

  • 概述:操作 XML 文档,将文档中的数据读取到内存忠

  • 操作 XML 文档

    1. 解析(读取):将文档中的数据读取到内存中
    2. 写入:将内存中的数据保存到 XML 文档中,持久化存储。
  • XML 常见的解析器

    1. JASXP:sun 公司提供的解析器,支持 DOM 和 SAX 两种思想
    2. DOM4J:一款非常优秀的解析器
    3. Jsoup:Jsoup 是一款 Java 的HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容,它提供了一套非常省力的API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
    4. PULL:Android 操作系统内置的解析器,SAX 方式。
  • 解析 XML 的方式(常见面试题)

    1. DOM:将标记语言文档一次性加载进内存,在内存中形成一棵 DOM 树(服务器端)
      • 优点:操作方便,可以对文档进行 CRUD 的所有操作
      • 缺点:占内存
    2. SAX:逐行读取,基于事件驱动的,读一行释放一行(手机端,浏览器端)
      • 优点:不占内存
      • 缺点:只能读取,不能增删改

Jsoup使用

  • 下载地址

  • 使用步骤:

    1. 导入刚才下载的 jar 包
    2. 获取 Document 对象
    3. 获取对应的标签 Element 对象
    4. 获取数据
  • 示例代码

    //2.1获取student.xml的path
    String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
    //2.2解析xml文档,加载文档进内存,获取dom树--->Document
    Document document = Jsoup.parse(new File(path), "utf-8");
    //3.获取元素对象 Element
    Elements elements = document.getElementsByTag("name");
    
    System.out.println(elements.size());
    //3.1获取第一个name的Element对象
    Element element = elements.get(0);
    //3.2获取数据
    String name = element.text();
    System.out.println(name);
    
对象详解
Jsoup
  • Jsoup:工具类,可以解析 HTML 或 XML 文档,返回 Document 对象

  • 方法

    方法作用
    parse(File in ,String charsetName)解析 XML 或 HTML 文件
    parse(String html)解析 XML 或 HTML 字符串
    parse(URL url , int timeoutMills)通过网络路径获取指定的 XML 或 HTML 的文档对象(可做爬虫)
Document
  • Document:文档对象,代表内存中的 DOM 树,获取任意 Element 对象

  • 方法

    方法作用
    getElementById(String id)根据id属性值获取唯一的element对象
    getElementsByTag(String tagName)根据标签名称获取元素对象集合
    getElementsByAttribute(String key)根据属性名称获取元素对象集合
    getElementsByAttributeValue(String key, String value)根据对应的属性名和属性值获取元素对象集合
Elements
  • Elements:元素 Element 对象的集合,可以当作 ArrayList 来使用
Element
  • Element:元素对象,获取子元素对象

  • 方法

    方法作用
    getElementById(String id)根据id属性值获取唯一的element对象
    getElementsByTag(String tagName)根据标签名称获取元素对象集合
    getElementsByAttribute(String key)根据属性名称获取元素对象集合
    getElementsByAttributeValue(String key, String value)根据对应的属性名和属性值获取元素对象集合
    String attr(String key)根据属性名称(不区分大小写)获取属性值
    String text()获取所有子标签的纯文本内容
    String html()获取标签体的所有内容(包括子标签的字符串内容)
Node
  • Node:节点对象,是 Document 和 Element 的父类

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch(ES) 下载添加IK分词器

上文 通过Web请求对 Elasticsearch(ES) 进行索引的 增删查 操作 我们通过web请求 创建了一个索引 但 目前 我们的索引是不具有分词效果的 我们并没有为索引指定分词器 所以 我们目前加进去的数据 就会保持原样 没有分词的能力 我们执行get查询操作 会发现一个 mappings字段 它…

如何访问 Oracle OKE 集群

OKE是Oracle Cloud提供的托管Kubernetes服务&#xff0c;为用户提供强大而灵活的容器编排平台。在本文中&#xff0c;我们将详细介绍如何有效地与OKE集群进行交互&#xff0c;包括访问集群的不同方式、管理访问权限以及执行常见操作的步骤。 1 安装oci命令 1.1 在Oracle Linux…

算法总结归纳(第十天)(动态规划第三部分)(线性dp)

目录 一、简单线性dp 1、最长递增子序列 ①、题目描述 ②、解题思路 ③、代码实现 2、最长连续递增序列 ①、题目描述 ②、解题思路 ③、代码实现 3、最长重复子数组 ①、题目描述 ②、解题思路 ③、代码实现 4、最长公共子序列 ①、题目描述 ②、解题思路 ③、…

Spring Boot 整合 Redis 使用教程

作为开发者&#xff0c;相信大家都知道 Redis 的重要性。Redis 是使用 C 语言开发的一个高性能键值对数据库&#xff0c;是互联网技术领域使用最为广泛的存储中间件&#xff0c;它是「Remote Dictionary Service」的首字母缩写&#xff0c;也就是「远程字典服务」。 Redis 以超…

openharmony开发版应用安装签名

配置签名信息 应用/服务在真机设备上运行&#xff0c;需要提前为应用/服务进行签名&#xff0c;DevEco Studio为开发者提供了自动化签名方案&#xff0c;可以一键完成应用/服务签名。具体操作如下&#xff1a; 单击File > Project Structure > Project > Signing Con…

Pandas进阶--map映射,分组聚合和透视pivot_table详解

文章目录 1.Pandas的map映射&#xff08;1&#xff09;映射&#xff08;2&#xff09;map充当运算工具 2.数据分组和透视&#xff08;1&#xff09;分组统计 - groupby功能 是pandas最重要的功能&#xff08;2&#xff09;聚合agg 3.透视表pivot_table&#xff08;1&#xff09…

【大厂AI课学习笔记】1.3 人工智能产业发展(4)——泛在的人工智能

人工智能走向泛在。 泛在&#xff0c;就是广泛存在。&#xff08;下图来自腾讯AI课。&#xff09; 没办法&#xff0c;被百度抛弃了&#xff0c;想学习&#xff0c;课程打不开&#xff0c;只好投想腾讯的怀抱。 之前考过腾讯云的认证&#xff0c;课程做的还是条理很清晰。 主…

铁轨语义分割(Unet结合resnet系列)

数据介绍 一类是图片&#xff0c;一类是图像标签。 引入库&#xff0c;处理数据 import torch.nn as nn import torch import torch.nn.functional as F import os from PIL import Image import torch from torch.utils.data import Dataset import torchvision.transfor…

QEMU源码全解析 —— 内存虚拟化(1)

接前一篇文章&#xff1a; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 内存虚拟化硬件基础——EPT 特此致谢&#xff01; 内存虚拟化简介 内存是计算机必不可少的组成…

C languange DGEQRF 示例,link liblapack.a

1.示例源码 #include <stdio.h>int min(int m, int n){ return m<n? m:n;}void print_matrix(double* A, int m, int n, int lda) {for (int i 0; i < m; i){for (int j 0; j < n; j){//printf("%7.4f ", A[i j*lda]);printf("%7.4f, &quo…

【数据结构】分治策略

现场保护和现场恢复 文章目录 分治策略分治法解决问题有以下四个特征&#xff1a;分治法步骤: 递归&#xff1a;解决以下问题&#xff1a;倒序输出整数求最大公约数&#xff08;递归和非递归&#xff09;菲波那切数列 不要尝试间接 要使用直接递归&#xff08;自己调用自己&am…

创建与删除数据库(四)

创建与删除数据库&#xff08;四&#xff09; 一、创建数据库 1.1 使用DDL语句创建数据库 CREATE DATABASE 数据库名 DEFAULT CHARACTER 示例&#xff1a; 创建一个test 的数据库&#xff0c;并查看该数据库&#xff0c;以及该数据库的编码。 创建数据库&#xff1a; cre…

MATLAB Fundamentals>>>Centering and Scaling

MATLAB Fundamentals>Common Data Analysis Techniques>Polynomial Fitting>Centering and Scaling 数据导入 This code sets up the activity. yr 2000:2007 penguins [5.49 7.03 7.73 7.70 9.29 9.21 11.89 10.85] 附加练习 How does the model look?…

嵌入式——数字/模拟转换模块(DAC)

目录 一、初识DAC 1. 介绍 2. DAC主要特性 3. DAC的特性参数 二、相关寄存器 1. 控制寄存器&#xff08;DAC_CR&#xff09; 2. DAC通道1 的12位右对齐数据保持寄存器&#xff08;DAC_DHR12R1&#xff09; 3. 通道1数据输出寄存器&#xff08;DAC_DOR1&#xff09; 三…

C# .Net Framework Swagger

1.安装 Swagger 在NuGet程序包中安装以下文件 Swashbuckle: Swagger&#xff1a; Swagger.Net: 2.在项目APP_Start 文件夹下面找到 SwaggerNet.cs文件 1.注释掉这两行代码 2.将PreStart方法的内容修改为以下 public static void PreStart() {RouteTable.Routes.MapHttpRoute(…

Message Queue --- RabbitMQ

MessageQueue Intro 什么是MQ为什么使用MQ常见的MQ 什么是MQ MQ全称是Message Queue&#xff0c;消息的队列&#xff0c;因为是队列&#xff0c;所以遵循FIFO 先进先出的原则&#xff0c;它是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互联网架构中&#xff0c;M…

Win搭建PalWorld服务器,幻兽帕鲁开服联机教程,0基础保姆级教程

Windows系统搭建幻兽帕鲁私服&#xff0c;PalWorld开服联机教程&#xff0c;零基础保姆级教程。 最近这游戏挺火&#xff0c;很多人想跟朋友联机&#xff0c;如果有专用服务器&#xff0c;就不需要房主一直开着电脑&#xff0c;稳定性也好得多。 视频教程&#xff1a;https:/…

vue-cli组件的使用

一、前言 ​ 本文介绍 vue-cli组件的使用&#xff0c;基于已经搭建好的基础项目。关于 vue-cli 构建项目的详细流程&#xff0c;可参考博文&#xff1a;使用vue脚手架构建项目 二、使用步骤 1、创建Header.vue组件 在components 目录下创建 Header.vue 编写Header.vue <…

figure方法详解之清除图形内容

figure方法详解之清除图形内容 一 clf():二 clear():三 clear()方法和clf()方法的区别&#xff1a; 前言 Hello 大家好&#xff01;我是甜美的江。 在数据可视化中&#xff0c;Matplotlib 是一个功能强大且广泛使用的库&#xff0c;它提供了各种方法来创建高质量的图形。在 Mat…

SSE长连接( SpringBoot整合SSE(Server-Sent Events)可以实现后端主动向前端推送数据)

Demo代码分享 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.or…