day25-XML

1.xml

1.1概述【理解】

  • 万维网联盟(W3C)

    万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。
    建立者: Tim Berners-Lee (蒂姆·伯纳斯·李)。
    是Web技术领域最具权威和影响力的国际中立性技术标准机构。
    到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南,

    • 如广为业界采用的超文本标记语言HTML(标准通用标记语言下的一个应用)、

    • 可扩展标记语言XML(标准通用标记语言下的一个子集)

    • 以及帮助残障人士有效获得Web信息的无障碍指南(WCAG)等

      在这里插入图片描述

  • xml概述

    XML的全称为(EXtensible Markup Language),是一种可扩展的标记语言
    标记语言: 通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)
    可扩展:标签的名字是可以自定义的,XML文件是由很多标签组成的,而标签名是可以自定义的

  • 作用

    • 用于进行存储数据和传输数据
    • 作为软件的配置文件
  • 作为配置文件的优势

    • 可读性好
    • 可维护性高

1.2标签的规则【应用】

  • 标签由一对尖括号和合法标识符组成

    <student>
    
  • 标签必须成对出现

    <student> </student>
    前边的是开始标签,后边的是结束标签
    
  • 特殊的标签可以不成对,但是必须有结束标记

    <address/>
    
  • 标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来

    <student id="1"> </student>
    
  • 标签需要正确的嵌套

    这是正确的: <student id="1"> <name>张三</name> </student>
    这是错误的: <student id="1"><name>张三</student></name>
    

1.3语法规则【应用】

  • 语法规则

    • XML文件的后缀名为:xml

    • 文档声明必须是第一行第一列

      <?xml version="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[ …内容… ]]>
  • 示例代码

    <?xml version="1.0" encoding="UTF-8" ?>
    <!--注释的内容-->
    <!--本xml文件用来描述多个学生信息-->
    <students><!--第一个学生信息--><student id="1"><name>张三</name><age>23</age><info>学生&lt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;的信息</info><message> <![CDATA[内容 <<<<<< >>>>>> ]]]></message></student><!--第二个学生信息--><student id="2"><name>李四</name><age>24</age></student></students>
    

1.4xml解析【应用】

  • 概述

    xml解析就是从xml中获取到数据

  • 常见的解析思想

    DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。
    会把xml文件全部加载到内存,在内存中形成一个树形结构,再获取对应的值

    在这里插入图片描述

  • 常见的解析工具

    • JAXP: SUN公司提供的一套XML的解析的API
    • JDOM: 开源组织提供了一套XML的解析的API-jdom
    • DOM4J: 开源组织提供了一套XML的解析的API-dom4j,全称:Dom For Java
    • pull: 主要应用在Android手机端解析XML
  • 解析的准备工作

    1. 我们可以通过网站:https://dom4j.github.io/ 去下载dom4j

      今天的资料中已经提供,我们不用再单独下载了,直接使用即可

    2. 将提供好的dom4j-1.6.1.zip解压,找到里面的dom4j-1.6.1.jar

    3. 在idea中当前模块下新建一个libs文件夹,将jar包复制到文件夹中

    4. 选中jar包 -> 右键 -> 选择add as library即可

  • 需求

    • 解析提供好的xml文件
    • 将解析到的数据封装到学生对象中
    • 并将学生对象存储到ArrayList集合中
    • 遍历集合
  • 代码实现

    <?xml version="1.0" encoding="UTF-8" ?>
    <!--注释的内容-->
    <!--本xml文件用来描述多个学生信息-->
    <students><!--第一个学生信息--><student id="1"><name>张三</name><age>23</age></student><!--第二个学生信息--><student id="2"><name>李四</name><age>24</age></student></students>// 上边是已经准备好的student.xml文件
    public class Student {private String id;private String name;private int age;public Student() {}public Student(String id, String name, int age) {this.id = id;this.name = name;this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"id='" + id + '\'' +", name='" + name + '\'' +", age=" + age +'}';}
    }/*** 利用dom4j解析xml文件*/
    public class XmlParse {public static void main(String[] args) throws DocumentException {//1.获取一个解析器对象SAXReader saxReader = new SAXReader();//2.利用解析器把xml文件加载到内存中,并返回一个文档对象Document document = saxReader.read(new File("myxml\\xml\\student.xml"));//3.获取到根标签Element rootElement = document.getRootElement();//4.通过根标签来获取student标签//elements():可以获取调用者所有的子标签.会把这些子标签放到一个集合中返回.//elements("标签名"):可以获取调用者所有的指定的子标签,会把这些子标签放到一个集合中并返回//List list = rootElement.elements();List<Element> studentElements = rootElement.elements("student");//System.out.println(list.size());//用来装学生对象ArrayList<Student> list = new ArrayList<>();//5.遍历集合,得到每一个student标签for (Element element : studentElements) {//element依次表示每一个student标签//获取id这个属性Attribute attribute = element.attribute("id");//获取id的属性值String id = attribute.getValue();//获取name标签//element("标签名"):获取调用者指定的子标签Element nameElement = element.element("name");//获取这个标签的标签体内容String name = nameElement.getText();//获取age标签Element ageElement = element.element("age");//获取age标签的标签体内容String age = ageElement.getText();//            System.out.println(id);
    //            System.out.println(name);
    //            System.out.println(age);Student s = new Student(id,name,Integer.parseInt(age));list.add(s);}//遍历操作for (Student student : list) {System.out.println(student);}}
    }
    

1.5DTD约束【理解】

  • 什么是约束

    用来限定xml文件中可使用的标签以及属性

  • 约束的分类

    • DTD
    • schema
  • 编写DTD约束

    • 步骤

      1. 创建一个文件,这个文件的后缀名为.dtd

      2. 看xml文件中使用了哪些元素

        <!ELEMENT> 可以定义元素
      3. 判断元素是简单元素还是复杂元素

        简单元素:没有子元素。
        复杂元素:有子元素的元素;

    • 代码实现

      <!ELEMENT persons (person)>
      <!ELEMENT person (name,age)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      
    
    
  • 引入DTD约束

    • 引入DTD约束的三种方法

      • 引入本地dtd

      • 在xml文件内部引入

      • 引入网络dtd

    • 代码实现

      • 引入本地DTD约束

        // 这是persondtd.dtd文件中的内容,已经提前写好
        <!ELEMENT persons (person)>
        <!ELEMENT person (name,age)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>// 在person1.xml文件中引入persondtd.dtd约束
        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE persons SYSTEM 'persondtd.dtd'><persons><person><name>张三</name><age>23</age></person></persons>
        
      • 在xml文件内部引入

        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE persons [<!ELEMENT persons (person)><!ELEMENT person (name,age)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)>]><persons><person><name>张三</name><age>23</age></person></persons>
        
      • 引入网络dtd

        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE persons PUBLIC "dtd文件的名称" "dtd文档的URL"><persons><person><name>张三</name><age>23</age></person></persons>
        
  • DTD语法

    • 定义元素

      定义一个元素的格式为:<!ELEMENT 元素名 元素类型>
      简单元素:

      ​ EMPTY: 表示标签体为空

      ​ ANY: 表示标签体可以为空也可以不为空

      ​ PCDATA: 表示该元素的内容部分为字符串

      复杂元素:
      ​ 直接写子元素名称. 多个子元素可以使用",“或者”|"隔开;
      ​ ","表示定义子元素的顺序 ; “|”: 表示子元素只能出现任意一个
      ​ "?"零次或一次, "+"一次或多次, "*"零次或多次;如果不写则表示出现一次

      在这里插入图片描述

    • 定义属性

      格式

      定义一个属性的格式为:<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
      属性的类型:
      ​ CDATA类型:普通的字符串

      属性的约束:

      ​ // #REQUIRED: 必须的
      ​ // #IMPLIED: 属性不是必需的
      ​ // #FIXED value:属性值是固定的

    • 代码实现

      <!ELEMENT persons (person+)>
      <!ELEMENT person (name,age)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      <!ATTLIST person id CDATA #REQUIRED><?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE persons SYSTEM 'persondtd.dtd'><persons><person id="001"><name>张三</name><age>23</age></person><person id = "002"><name>张三</name><age>23</age></person></persons>
      ​```
      

1.6schema约束【理解】

  • schema和dtd的区别

    1. schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名.xsd
    2. 一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
    3. dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
    4. schema 语法更加的复杂

    在这里插入图片描述

  • 编写schema约束

    • 步骤

      1,创建一个文件,这个文件的后缀名为.xsd。
      2,定义文档声明
      3,schema文件的根标签为:
      4,在中定义属性:
      ​ xmlns=http://www.w3.org/2001/XMLSchema
      5,在中定义属性 :
      ​ targetNamespace =唯一的url地址,指定当前这个schema文件的名称空间。
      6,在中定义属性 :
      ​ elementFormDefault="qualified“,表示当前schema文件是一个质量良好的文件。
      7,通过element定义元素
      8,判断当前元素是简单元素还是复杂元素

      在这里插入图片描述

    • 代码实现

      <?xml version="1.0" encoding="UTF-8" ?>
      <schemaxmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.itheima.cn/javase"elementFormDefault="qualified"
      ><!--定义persons复杂元素--><element name="persons"><complexType><sequence><!--定义person复杂元素--><element name = "person"><complexType><sequence><!--定义name和age简单元素--><element name = "name" type = "string"></element><element name = "age" type = "string"></element></sequence></complexType></element></sequence></complexType></element></schema>
  • 引入schema约束

    • 步骤

      1,在根标签上定义属性xmlns=“http://www.w3.org/2001/XMLSchema-instance”
      2,通过xmlns引入约束文件的名称空间
      3,给某一个xmlns属性添加一个标识,用于区分不同的名称空间
      ​ 格式为: xmlns:标识=“名称空间地址” ,标识可以是任意的,但是一般取值都是xsi
      4,通过xsi:schemaLocation指定名称空间所对应的约束文件路径
      ​ 格式为:xsi:schemaLocation = "名称空间url 文件路径“

    • 代码实现

      <?xml version="1.0" encoding="UTF-8" ?><personsxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.itheima.cn/javase"xsi:schemaLocation="http://www.itheima.cn/javase person.xsd"
      ><person><name>张三</name><age>23</age></person></persons>
      ​```
      
  • schema约束定义属性

    • 代码示例

      <?xml version="1.0" encoding="UTF-8" ?>
      <schemaxmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.itheima.cn/javase"elementFormDefault="qualified"
      ><!--定义persons复杂元素--><element name="persons"><complexType><sequence><!--定义person复杂元素--><element name = "person"><complexType><sequence><!--定义name和age简单元素--><element name = "name" type = "string"></element><element name = "age" type = "string"></element></sequence><!--定义属性,required( 必须的)/optional( 可选的)--><attribute name="id" type="string" use="required"></attribute></complexType></element></sequence></complexType></element></schema><?xml version="1.0" encoding="UTF-8" ?>
      <personsxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.itheima.cn/javase"xsi:schemaLocation="http://www.itheima.cn/javase person.xsd"
      ><person id="001"><name>张三</name><age>23</age></person></persons>
      ​```

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

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

相关文章

Linux下CPU1000%记一次挖矿病毒清理流程

今天top后发现一个进程CPU高1795%&#xff0c;判断是病毒 查找进程ps -elf|grep 进程idpid和ppid查找到sleep进程 ps -ef|grep 4277 查看具体进程内容&#xff0c;ll /proc/进程idpid ll /proc/4277 ls -l /proc/{pid号} ls -l /proc/{pid号}/exe kill掉病毒进程 排查病毒…

springboot+vue 社区养老服务系统

Springbootvue社区居家养老服务系统&#xff0c;数据库mysql&#xff0c;mybatis框架&#xff0c;有可视化页面。 功能&#xff1a; 用户管理 养老服务管理 护理人员管理 服务类型管理 健康状况管理 社区管理 服务区管理 娱乐资讯管理 咨询分类管理 反馈建议 系统简历管理 轮播…

opencv-python(一)

1. 图片加载与显示 import cv2 import numpy as npif __name__"__main__":rose cv2.imread(./rose.jpeg)print(rose.shape)print(type(rose))cv2.imshow(rose,rose) # 弹出窗口cv2.waitKey() # 等待键盘输入&#xff0c;任意输入&#xff0c;触发这行代码&#xff…

开源硬件初识——Orange Pi AIpro(8T)

开源硬件初识——Orange Pi AIpro&#xff08;8T&#xff09; 大抵是因为缘&#xff0c;妙不可言地就有了这么一块儿新一代AI开发板&#xff0c;乐于接触新鲜玩意儿的小火苗噌一下就燃了起来。 还没等拿到硬件&#xff0c;就已经开始在Orange Pi AIpro 官网上查阅起资料&…

【简单介绍下Milvus,什么是Milvus?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

ROS无人机追踪小车项目开发实战 | 第四届中国智能汽车创新大会圆满结束

2024年5月26日&#xff0c;阿木实验室在深圳第四届中国智能汽车创新大会上&#xff0c;开展的《Prometheus开源平台-ROS无人机追踪小车项目开发实战课》圆满结束。 该实战课从初学者的角度出发&#xff0c;通过实践性讲解和开发&#xff0c;使开发者们系统地学习了硬件系统架构…

【html】用html模拟微信布局

您做的这个模拟微信布局的作品很不错,使用了Flexbox布局来实现元素的灵活排列。以下是关于您代码的一些分析和建议: 效果图: 代码分析: 全局样式重置: 您使用了* { margin: 0; padding: 0; }来重置所有元素的边距。这是一个常见的做法,可以避免不同浏览器默认样式的差…

js四舍五入和计算精度问题处理

js四舍五入和计算精度问题处理 目录 js四舍五入和计算精度问题处理错误计算方法示例代码 js中加减乘除&#xff0c;部分数据会存在计算不准确。 错误计算 我使用的是big.js&#xff0c;基于big.js库封装了下工具方法&#xff0c;当然也可以用其他库&#xff0c;如mathjs/bignu…

找回xmind文件办法:一切意外均可找回(误删/重启关机等)

我周三编辑完&#xff0c;周四下午评审完用例忘记保存 结果到了快乐星期五&#xff0c;由于是周五我太开心了...早上到公司后觉得电脑卡&#xff0c;直接点了重启啥都没保存啊啊啊啊啊 准备上传测试用例时才想起来我的用例找不见了&#xff01;&#xff01;&#xff01;&…

Go微服务: 封装nacos-sdk-go的v2版本与应用

概述 基于前文&#xff1a;https://active.blog.csdn.net/article/details/139213323我们基于此SDK提供的API封装一个公共方法来用于生产环境 封装 nacos-sdk-go 我们封装一个 nacos.go 文件, 这个是通用的工具库 package commonimport ("fmt""github.com/nac…

使用LeanCloud平台的即时通讯

LeanCloud 是领先的 Serverless 云服务&#xff0c;为产品开发提供强有力的后端支持&#xff0c;旨在帮助开发者降低研发、运营维护等阶段投入的精力和成本。 LeanCloud 整合了各项服务&#xff0c;让开发者能够聚焦在核心业务上&#xff0c;为客户创造更多价值。 *即时通讯 …

基于安卓的虫害识别软件设计--(1)模型训练与可视化

引言 简介&#xff1a;使用pytorch框架&#xff0c;从模型训练、模型部署完整地实现了一个基础的图像识别项目计算资源&#xff1a;使用的是Kaggle&#xff08;每周免费30h的GPU&#xff09; 1.创建名为“utils_1”的模块 模块中包含&#xff1a;训练和验证的加载器函数、训练…

【Python爬虫--scrapy+selenium框架】超详细的Python爬虫scrapy+selenium框架学习笔记(保姆级别的,非常详细)

六&#xff0c;selenium 想要下载PDF或者md格式的笔记请点击以下链接获取 python爬虫学习笔记点击我获取 Scrapyselenium详细学习笔记点我获取 Python超详细的学习笔记共21万字点我获取 1&#xff0c;下载配置 ## 安装&#xff1a; pip install selenium## 它与其他库不同…

【C++】C++11新特性:列表初始化、声明、新容器、右值引用、万能引用和完美转发

目录 一、列表初始化 1.1 { } 初始化 1.2 std::initializer_list 二、声明 2.1 auto 2.2 decltype 2.3 nullptr 三、新容器 四、右值引用和移动语义 4.1 左值和左值引用 4.2 右值和右值引用 4.3 左值引用与右值引用比较 4.4 右值引用使用场景和意义&#xff1a;移…

万字长文深度解析Agent反思工作流框架Reflexion下篇:ReflectionAgent workflow

在前文[LLM-Agents]万字长文深度解析Agent反思工作流框架Reflexion中篇&#xff1a;React中&#xff0c;我们详细解析了ReactAgent的工作流程&#xff0c;而本文则将在此基础上探讨反思技巧的应用。之前的文章中[LLM-Agents]反思Reflection 工作流我们已经对反思技巧进行了探讨…

多维数组操作,不要再用遍历循环foreach了!来试试数组展平的小妙招!array.flat()用法与array.flatMap() 用法及二者差异详解

目录 一、array.flat&#xff08;&#xff09;方法 1.1、array.flat&#xff08;&#xff09;的语法及使用 ①语法 ②返回值 ③用途 二、array.flatMap() 方法 2.1、array.flatMap()的语法及作用 ①语法 ②返回值 ③用途 三、array.flat&#xff08;&#xff09;与a…

CLIP 源码分析:simple_tokenizer.py

tokenizer的含义 from .clip import *引入头文件时为什么有个. 正文 import gzip import html import os from functools import lru_cacheimport ftfy import regex as re# 上面的都是头文件# 这段代码定义了一个函数 default_bpe()&#xff0c;它使用了装饰器 lru_cache()。…

一维时间序列信号的改进小波降噪方法(MATLAB R2021B)

目前国内外对于小波分析在降噪方面的方法研究中&#xff0c;主要有小波分解与重构法降噪、小波阈值降噪、小波变换模极大值法降噪等三类方法。 (1)小波分解与重构法降噪 早在1988 年&#xff0c;Mallat提出了多分辨率分析的概念&#xff0c;利用小波分析的多分辨率特性进行分…

DAQmx Connect Terminals (VI) 信号路由作用及意义

DAQmx Connect Terminals是一个LabVIEW虚拟仪器&#xff08;VI&#xff09;&#xff0c;用于配置和连接数据采集系统中的物理终端或虚拟终端。这一功能在配置复杂的数据采集&#xff08;DAQ&#xff09;系统时非常重要&#xff0c;因为它允许用户在不改变硬件连接的情况下&…

Python——Selenium快速上手+方法(一站式解决问题)

目录 前言 一、Selenium是什么 二、Python安装Selenium 1、安装Selenium第三方库 2、下载浏览器驱动 3、使用Python来打开浏览器 三、Selenium的初始化 四、Selenium获取网页元素 4.1、获取元素的实用方法 1、模糊匹配获取元素 & 联合多个样式 2、使用拉姆达表达式 3、加上…