XML详解

news/2024/10/17 20:19:38/

文章目录

    • 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.ppmy.cn/news/1341748.html

相关文章

如何搭建私有云盘SeaFile并实现远程访问本地文件资料

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-hsDnDEybLME85dTx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

数据分析基础之《pandas(4)—pandas画图》

1、DataFrame.plot(xNone, yNone, kindline) 说明&#xff1a; x&#xff1a;设置x轴标签 y&#xff1a;设置y轴标签 kind&#xff1a; line 折线图 bar 柱状图 hist 直方图 pie 饼图 scatter 散点图 # 找到p_change和turnover之间的关系 data.plot(xvolume, yturnover, kinds…

LeetCode_19_中等_删除链表的倒数第N个结点

文章目录 1. 题目2. 思路及代码实现&#xff08;Python&#xff09;2.1 计算链表长度2.2 栈 1. 题目 给你一个链表&#xff0c;删除链表的倒数第 n n n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a; h e a d [ 1 , 2 , 3 , 4 , 5 ] , n…

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-管理组件状态(九)

管理组件状态 一、概述 在应用中&#xff0c;界面通常都是动态的。下图所示&#xff0c;在子目标列表中&#xff0c;当用户点击目标一&#xff0c;目标一会呈现展开状态&#xff0c;再次点击目标一&#xff0c;目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 Ar…

02-OpenFeign-微服务接入

1、依赖 由于是spring cloud项目&#xff0c;注意spring-boot、cloud、alibaba的版本兼容性 1.1、父级依赖 <properties><java.version>1.8</java.version><spring-boot.version>2.7.18</spring-boot.version><spring.cloud.version>20…

【Simulink系列】——动态系统仿真 之 简单系统

引入 不同的系统具有不同的输入与输出。一般来说&#xff0c;输入输出数目越多&#xff0c;系统越复杂。最简单的系统只要一个输入一个输出&#xff08;SISO&#xff09;&#xff0c;且其任意时刻的输出只与当前时刻的输入有关。 一、简单系统定义 对于满足下列条件的系统&a…

谷粒商城-P19

项目结构创建&提交到码云 数据库初始化 保持docker数据库一直打开 docker update redis --restartalways 连不上了&#xff0c;发现配置文件错了 换了一个配置文件。 快速开发 使用开源的脚手架 人人开源 (gitee.com) 使用renren-fast作为后台开发&#xff0c;使用…

STM32CAN2进入bus off 模式

工作遇到的问题记录 无人机CAN2整个进不了中断&#xff0c;通过查看寄存器判定出CAN节点进入了bus off mode 为何进入bus off &#xff0c;最后通过示波器看到整个CAN2总线波形就不对&#xff0c;总线出现了错误 Busoff的产生是一定是因为节点自身识别到自己发送错误&#xff…