XML详解

news2024/9/25 21:25:23

文章目录

    • XML
      • 简介
      • 语法
      • 约束
        • DTD
        • Schema
    • 解析
      • Jsoup使用
        • 对象详解
          • Jsoup
          • Document
          • Elements
          • Element
          • Node

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 的父类

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

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

相关文章

mysql-FIND_IN_SET查询优化

优化前 SELECTuser_id,user_name,real_name,PASSWORD,real_org_id,real_org_name,real_dept_id,real_dept_name, STATUS FROMsys_user WHEREis_del 0 AND find_in_set( lilong, login_user_account ) 优化后 SELECTuser_id,user_name,real_name,PASSWORD,real_org_id,real…

虚拟机Windows Server 2016 安装 MySQL8

目录 一、下载MySQL8 1.下载地址&#xff1a; 2.创建my.ini文件 二、安装步骤 第一步&#xff1a;命令窗口 第二步&#xff1a;切换目录 第三步&#xff1a;安装服务 第四步&#xff1a;生成临时密码 第五步&#xff1a;启动服务 第六步&#xff1a; 修改密码 三…

《A++ 敏捷开发》- 6 估算软件规模

为什么要估规模 规模可以帮我们&#xff1a; 依据历史数据策划&#xff0c;例如估算工作量、工期。归一(Normalize)不同项目作比较。知道现在水平。 依据历史数据策划先把项目分成组件&#xff0c;参考以往类似的组件所花工作量&#xff0c;估算整个项目的总工作量。规模大小…

时间回显+选择(年月日时分秒

一、获取某个时间 1、Date获取Date类型 <el-form-item label"时间" name"endTime"><el-date-picker type"datetime" v-model"editForm.endTime"></el-date-picker> </el-form-item> 效果如图&#xff1a; …

关于爬取所有哔哩哔哩、任意图片、所有音乐、的python脚本语言-Edge浏览器插件 全是干货!

这些都是现成的并且实时更新的&#xff01;从次解放双手&#xff01; 首先有自己的edge浏览器基本上都有并且找到插件选项 1.哔哩哔哩视频下载助手&#xff08;爬取哔哩哔哩视频&#xff09; bilibili哔哩哔哩视频下载助手 - Microsoft Edge Addons 下面是效果&#xff1a; 2.图…

办公软件巨头CCED、WPS面临新考验,新款办公软件异军突起

办公软件巨头CCED、WPS的成长经历 众所周知&#xff0c;CCED和WPS在中国办公软件领域树立了两大知名品牌的地位。然而&#xff0c;它们的成功并非一朝一夕的成就&#xff0c;而是历经了长时间的发展与积淀。 在上世纪80年代末至90年代初&#xff0c;CCED作为中国大陆早期的一款…

Python爬虫http基本原理

Python爬虫逆向系列&#xff08;更新中&#xff09;&#xff1a;http://t.csdnimg.cn/5gvI3 HTTP 基本原理 在本节中&#xff0c;我们会详细了解 HTTP 的基本原理&#xff0c;了解在浏览器中敲入 URL 到获取网页内容之间发生了什么。了解了这些内容&#xff0c;有助于我们进一…

python爬虫爬取网站

流程&#xff1a; 1.指定url(获取网页的内容) 爬虫会向指定的URL发送HTTP请求&#xff0c;获取网页的HTML代码&#xff0c;然后解析HTML代码&#xff0c;提取出需要的信息&#xff0c;如文本、图片、链接等。爬虫请求URL的过程中&#xff0c;还可以设置请求头、请求参数、请求…

亿某通电子文档安全管理系统 UploadFileToCatalog SQL注入漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

用免费软件分流抢票Bypass辅助购买火车票的亲测可用方法

本文介绍基于分流抢票&#xff08;Bypass&#xff09;软件&#xff0c;协助购买预售、已开售或候补等各类状态的火车票的方法。 最近几天一直没有顾得上看过年回家的火车票&#xff0c;导致错过了回家车票的开售时间&#xff0c;所以当时就直接去12306的官方网站候补了&#xf…

基于3DGIS 的5G 基站规划

这个基于3DGIS 5G 基站规划的案例很不错&#xff0c;与大家分享一下。感觉是3DGIS中为数不多的实用案例。但还是没有特别多的突出三维的技术优势&#xff0c;因为这里面很多规划思想其实还是基于面的而不是基于体的&#xff01;好了不多说了&#xff0c;给大家分享这个案例&…

java hutool工具类实现将数据下载到excel

通过hutool工具类&#xff0c;对于excel的操作变得非常简单&#xff0c;上篇介绍的是excel的上传&#xff0c;对excel的操作&#xff0c;核心代码只有一行。本篇的excel的下载&#xff0c;核心数据也不超过两行&#xff0c;简洁方便&#xff0c;特别适合当下的低代码操作。 下载…

【Java程序设计】【C00188】基于SSM的宠物猫狗商业管理系统(论文+PPT)

基于SSM的宠物猫狗商业管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物猫狗商业系统 本系统分为前台系统、后台管理员以及后台用户3个功能模块。 前台系统&#xff1a;当游客打开系统的网址后&#xff0c;…

容器化对数据库的性能有影响吗?

引言 容器化是一种将应用程序及其依赖项打包到一个独立、可移植的运行环境中的技术。容器化技术通过使用容器运行时引擎&#xff08;比如Docker/Containerd&#xff09;来创建、部署和管理容器。Kubernetes&#xff08;通常简称为 k8s&#xff09;是一个开源的容器编排和管理平…

作业2024/2/3

第二章 引用内联重载 一&#xff0e;选择题 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句 C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句…

OceanBase 4.2.2 GA 发布,全新特性快速预览!

在 2023 年度发布会上&#xff0c;OceanBase 沿着“一体化”产品战略思路&#xff0c;发布了一体化数据库的首个长期支持版本 4.2.1 LTS。作为 4.0 系列的首个 LTS 版本&#xff0c;该版本的定位是支撑客户关键业务稳定长久运行&#xff0c;我们非常认真的打磨了这个版本&#…

MySQL事务原理-相关日志

文章目录 前言一、什么是事务&#xff1f;1.1 事务概念1.2 事务的四大特性1.3 事务的隔离级别 二、实现原理2.1 TODO2.2 TODO 前言 事务是由MySQL的引擎来实现的&#xff0c;通过show engines命令查看MySQL存储引擎类别&#xff0c;观察只有InnoDB存储引擎支持事务。 一、什么…

Transformer实战-系列教程3:Vision Transformer 源码解读1

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 1、整体解读 在文本任务中大量使用了Transformer 架构&#xff0c;因为文本数据是一个序列非常好…

如何在FBX剔除Lit.shader依赖

1&#xff09;如何在FBX剔除Lit.shader依赖 2&#xff09;Unity出AAB包&#xff08;PlayAssetDelivery&#xff09;模式下加载资源过慢问题 3&#xff09;如何在URP中正确打出Shader变体 4&#xff09;XLua打包Lua文件粒度问题 这是第371篇UWA技术知识分享的推送&#xff0c;精…

浅谈一下SpringBoot吧

什么是SpringBoot&#xff1f; Spring Boot 是由 Pivotal 团队提供的基于 Spring 的全新框架&#xff0c;旨在简化 Spring 应用的初始搭建和开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。 约定大于&#xff08;优于&#…