XML

​ XML是一种可扩展的标记语言;标签语言是通过标签来描述数据的一门语言;可扩展是指标签的名字是可以自定义的。

作用:

  • 用于存储数据和传输数据
  • 作为软件的配置文件
XML标签规则

XML语法规则
  • XML文件的后缀名:xml
  • 文档声明必须是第一行第一列
    • <?xml version="1.0" encoding= "UTF-8" standalone= "yes" ?>
    • version:该属性是必须存在的
    • encoding:该属性不是必须的,表示xml文件的字符编码方式
    • standalone:该属性不是必须的,描述XML文件是否依赖其他的xml文件,取值为yes/no
  • 必须存在一个根标签,有且只能有一个
  • XML文件中可以定义注释信息
  • XML文件中可以存在以下特殊字符
  • XML文件中可以存在CDATA区<![CDATA[ ...内容... ]]>
<?xml version="1.0" encoding="UTF-8" ?>
<!--注释的内容-->
<!--本xml文件用来描述多个学生信息-->
<students><!--第一个学生信息--><student id="1"><name>小花</name><age>18</age><info>学生&lt;&gt;的信息</info><!--内容可以是任意内容--><message><![CDATA[ 内容 ]]></message></student><!--第二个学生信息--><student id="2"><name>小豆</name><age>16</age></student>
</students>
dom4j解析xml文件

​ 首先将dom4j的jar包导入libs文件中

package xmlparse;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;}@Overridepublic String toString() {return "Student{" +"id='" + id + '\'' +", name='" + name + '\'' +", 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;}
}package xmlparse;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.ArrayList;
import java.util.List;public class XmlParse {public static void main(String[] args) throws DocumentException {//获取一个解析器对象SAXReader saxReader  = new SAXReader();//利用解析器把xml文件加载到内存中,并返回一个文档对象Document read = saxReader.read(new File("day26\\src\\xml\\student.xml"));//获取到根标签Element rootElement = read.getRootElement();//通过根标签来获取student标签//elements():可以获取调用者所有的子标签,会把这些标签放到一个集合中返回//List list = rootElement.elements();//elements("标签名"):可以获取调用者所有的指定子标签,会把这些标签放到一个集合中返回List<Element> list = rootElement.elements("student");//System.out.println(list.size());//用来装学生对象ArrayList<Student> listStu = new ArrayList<>();//遍历集合,得到每一个student标签for (Element element : list) {//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");String age = ageElement.getText();
//            System.out.println(id);
//            System.out.println(name);
//            System.out.println(age);Student st = new Student(id,name,Integer.parseInt(age));listStu.add(st);}for (Student student : listStu) {System.out.println(student);}}
}

DTD约束

  • 能在xml中引入约束文档
  • 能够简单阅读约束文档
  • 根据约束编写xml文档
编写dtd文件persondtd.dtd
<!ELEMENT persons (person)>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>在xml中引入本地dtd约束
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE persons SYSTEM 'persondtd.dtd'>
<persons><person><name>小虎</name><age>15</age></person>
</persons>
引入DTD约束的三种方法
  • 引入本地dtd
  • 在xml文件内部引入
  • 引入网络dtd

在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>15</age></person>
</persons>引入网络dtd
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE person PUBLIC "dtd文件的名称" "dtd文档的URL">
<persons><person><name>小虎</name><age>15</age></person>
</persons>
DTD语法规则

定义元素:

定义属性:

定义一个属性的格式为:<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>

栗子:<!ATTLIST person id CDATA #FIXED "p1">

属性的类型:

CDATA类型:普通字符串

属性的约束:

#REQUIRED:必须的

#IMPLIED:属性不是必须的

#FIXED value:属性值是固定的

schema约束

schema和dtd的区别

  1. schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名.xsd
  2. 一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
  3. dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
  4. schema语法更加复杂,Schema文件用来约束一个xml文件,同时也被别的文件约束着
案例
  1. 创建一个文件,这个文件后缀名为.xsd;
  2. 定义文档声明
  3. schema文件的根标签为:
  4. 在中定义属性:xmlns=http://www.w3.org/2001/XML.Schema
  5. 在中定义属性:targetNamespace=唯一的URL地址。指定当前这个schema文件的名称空间
  6. 在中定义属性:elementFormDefault=“qualified”,表示当前schema文件是一个质量良好的文件
  7. 通过element定义元素
  8. 判断当前元素是简单元素还是复杂元素
编写schema约束
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.ahua.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

引入schema约束
<?xml version="1.0" encoding="UTF-8" ?>
<personsxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.ahua.cn/javase"xsi:schemaLocation="http://www.ahua.cn/javase person.xsd"
><person><name>阿三</name><age>13</age></person>
</persons>

Schema定义属性

            <!--定义person复杂元素--><element name="person"><complexType><sequence><!--定义name和age--><element name="name" type="string"></element><element name="age" type="string"></element></sequence>在person下的sequence标签外,complexType标签内<attribute name="id" type="string" use="required"></attribute></complexType></element>

枚举

概述

​ 指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。

定义格式:

public enum s{枚举项1,枚举项2,枚举项3;
}
练习

​ 定义一个枚举类,用来表示春,夏,秋,冬这四个固定值;

package meiju;public enum Season {SPRING,SUMMER,AUTUMN,WINTER;
}
枚举的特点
  1. 所有枚举类都是Enum的子类
  2. 我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
  3. 每一个枚举项其实就是该枚举的一个对象
  4. 枚举也是一个类,也可以去定义成员变量
  5. 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的
  6. 枚举类可以有构造器,但必须是private的,它默认的也是private的
  7. 枚举类也可以有抽象方法,但是枚举项必须重写该方法
枚举的方法
方法名 说明
String name() 获取枚举项的名称
int ordinal() 返回枚举项在枚举类中的索引值
int compareTo(E o) 比较两个枚举项在枚举类中的索引值
String toString() 返回枚举常量的名称
static T valueOf(Class type,String name) 获取指定枚举类中的指定名称的枚举值
values() 获得所有的枚举项
public class EnumTest {public static void main(String[] args) {//获取枚举项的名称String name = Season.SPRING.name();System.out.println(name);System.out.println("----------------------");//返回枚举项在枚举类中的索引值int index1 = Season.SPRING.ordinal();int index2 = Season.SUMMER.ordinal();int index3 = Season.AUTUMN.ordinal();int index4 = Season.WINTER.ordinal();System.out.println(index1+" "+index2+" "+index3+" "+index4);System.out.println("----------------------");//比较两个枚举项,返回的是索引值的差值int result = Season.SPRING.compareTo(Season.WINTER);System.out.println(result);System.out.println("----------------------");//返回枚举常量的名称String s = Season.SPRING.toString();System.out.println(s);System.out.println("----------------------");//获取指定枚举类中的指定名称的枚举值Season summer = Enum.valueOf(Season.class, "SUMMER");System.out.println(summer);System.out.println(Season.SUMMER == summer);System.out.println("----------------------");//获得所有的枚举项Season[] values = Season.values();for (Season value : values) {System.out.println(value);}}
}

注解

注解的作用:对程序进行标注和解释

注解名 说明
@Override 描述子类重写父类的方法
@Deprecated 描述方法过时
@SuppressWarnings 压制警告
自定义注解

格式:

public @interface 注解名称{public 属性类型 属性名 () default 默认值;
}
示例:
public @interface Test{public int a () default 23;
}

示例:

package anno;public enum Season {SPRING,SUMMER,AUTUMN,WINTER;
}package anno;public @interface Anno2 {}package anno;public @interface Anno1 {//定义一个基本类型的属性int a () default 23;//定义一个String类型的属性public String name ();//定义一个Class类型的属性public Class clazz() default Anno2.class;//定义一个注解类型的属性public Anno2 anno() default @Anno2;//定义一个枚举类型的属性public Season season() default Season.SPRING;//以上类型的一维数组public int[] arr() default {1,2,3,4,5};public Season[] seasons() default {Season.SPRING,Season.SUMMER};
}package anno;//在使用注解的时候,如果注解里的属性没有指定默认值
//那么我们就需要手动给出注解属性的设置值
@Anno1(name = "ahua")
public class AnnoTest {}
元注解

元注解:就是描述注解的注解

元注解名 说明
@Target 指定了注解能在哪里使用
@Retention 可以理解为保留时间(生命周期)
@Inherited 表示修饰的自定义注解可以被子类继承
@Documented 表示该自定义注解,会出现在API文档里面
@target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD})
//指定注解是用的位置,成员变量,类,方法
@Retention(RetentionPolicy.RUNTIME)
//指定该注解的存活时间
@Inherited
//指定该注解可以被继承

Java学习笔记day26-xml枚举注解相关推荐

  1. Java学习笔记之Enum枚举(1)

    Java学习笔记之Enum枚举(1) 前言 最基本的用法 了解Java中的Enum 后记 链接 前言 这是在学习Java过程中对自己遇到并得以解决的问题的一些记录,一方面是记录下来方便自己以后查询,一 ...

  2. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  3. Java学习笔记-Day64 Spring 框架(二)

    Java学习笔记-Day64 Spring 框架(二) 一.控制反转IOC和依赖注入DI 1.控制反转IOC 2.依赖注入DI 3.Spring IOC容器 3.1.简介 3.2.实现容器 3.2.获 ...

  4. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  5. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  6. java学习笔记:全部,txt版本

    java学习笔记:全部,txt版本 笔者注: 1.不知道怎么上传附件,所以就把txt文本内容全部贴在这里吧. 2.已经把txt版本的笔记上传到CSDN了,我没有设置索要积分才能下载,但是不知道为什么C ...

  7. Java学习笔记(原创)

    Java学习笔记(原创) 2011-12-01 16:37:00|  分类: Java|举报|字号 订阅 下载LOFTER客户端 基本知识 一. Java基础 1. java语言的特点: ①简单:没有 ...

  8. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  9. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

  10. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

最新文章

  1. Rocksdb 的 MergeOperator 简单使用记录
  2. Linux多线程管理: 多线程编程
  3. 风变编程的python课程怎么样-风变编程的Python这么火,零基础可以自学吗?
  4. 五子棋java判断平局_2020-10-03 Java初级项目——从零开始制作一个简易五子棋游戏...
  5. python网络通信编程实例_python网络编程之数据传输UDP实例分析
  6. bind函数polyfill源码解析
  7. Excel组件使用配置文档下载
  8. 汽车行业要变天?数据告诉你,为什么说合资车企正在走向末路
  9. 后置递增运算符(JS)
  10. c语言 465串口编程,用C语言编写串口程序
  11. 【FFmpeg小点记】AV_DISPOSITION_ATTACHED_PIC
  12. 算法:Majority Element(求众数)
  13. java对象的创建、java分配内存的方式、指针碰撞、空闲列表
  14. 【ERP】概念_总账系统、记账、往来科目
  15. Tony Mobily谈强化Apache
  16. footer的设置绝不只是设置footer:使html高、宽自适应和footer始终在网页最末尾
  17. Predicting drug–disease associations through layer attention graph convolutional network
  18. 用python写王字_看这里!Python之web之王!
  19. python用matplotlib画玫瑰_用Python matplotlib 怎么画风向玫瑰图 ,能给出程序的?
  20. Vue exports is not defined 问题解决(@svgdotjs/svg.js)

热门文章

  1. 四元数:从复数到四元数
  2. Android平台GB28181设备接入端如何支持跨网段语音对讲
  3. Interrupts Exceptions
  4. 找到了!Sketch导出PSD的方法!
  5. Java上传文件保存到指定路径
  6. 显示器尺寸和分辨率大小
  7. brew install 报错Cowardly refusing to `sudo brew install
  8. CAN总线BUS OFF
  9. Audio System 六 之 tinyplay playback、capture
  10. 五个创新模板之一,减法创新