day17-xml解析与约束

day17-xml解析与约束

一:XML配置文件

1.1 XML作为配置文件的优点

​ 当需要运行多个文件的时候,properties配置文件需要在等号后面接着写,并用逗号进行分割,使用起来不方便,配置文件的可读性也不强,而XML配置文件就可以解决这一问题

1.2 XML配置文件概述

​ XML的全称为(EXtensible Markup Language)是一种可扩展的标记语言

标记语言:通过标签来描述数据的语言(标签我们有时候也称之为元素)

可扩展:标签的名字是可以自定义的

作用:

  1. 可以用于数据的存储和传输

  2. 作为软件的配置文件

1.3 XML标签的规则
  • 标签有一对尖括号和合法的标识符组成
  • 标签必须成对出现
  • 有一些标签可以单独出现,但是必须要有结束标签
  • 标签中可以定义属性,属性和标签名需要用空格隔开,属性值必须用引号引起来
  • 标签必须要正确的嵌套
1.4 XML语法规则
  • XML文件的后缀名为:xml

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

  • <? xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
    • version:该属性是必须存在的
    • encoding:该属性不是必须的,表示打开当前XML文件应该使用什么编码表,一般是UTF-8;
    • standalone:该属性不是必须的,该标签是描述当前的XML文件是否依赖与其他的XML文件,取值为yes/no
  • XML文件中可以定义注释信息

  • XML文件中可以存在以下的特殊字符,分号不能省

&it; -> 小于

&gt; -> 大于

&amp;-> 和号

&apos;-> 单引号

&quot; -> 引号

  • XML文件中还可以存在CDATA区

<!【CDATA【…内容…】】>

1.5 DOM解析思想

DOM(Document Object Model):文档对象模型,就是把文档的各个组成部分看做对应的对象

会将xml文件全部加载到内存,在内存中形成一个树形结构,在获取对应的值

  • Document对象:代表整个xml文档
  • Element对象:代表所有标签
  • Attribude对象:代表所有属性
  • Test对象:所有文本内容
public static void main(String[] args) throws DocumentException {
        // 1. 获取整个文档对象document;获取一个解析器对象
        SAXReader saxReader = new SAXReader();
        // 2. 利用这个解析器将xml文件加载到内存中,并返回一个文档对象
        Document document = saxReader.read(new File("day18-code-XML\\xml\\student.xml"));
        // 3. 获取根标签
        Element rootElement = document.getRootElement();
        // 4. 通过跟标签获取Student标签
        // elements可以获取调用者所有的子标签,然后放入一个集合中返回
//        List list = rootElement.elements();
//        System.out.println(list.size());// 3
        List<Element> studentElements = rootElement.elements("student");//获取指定所有的子标签
        // 创建一个用来装封装好的学生对象
        ArrayList<Student> list = new ArrayList<>();
        // 5. 遍历集合得到每一个学生标签 
        for (Element element : studentElements) {
            // 获取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();
            // 封装为学生对象
            Student student = new Student(id,name,Integer.parseInt(age));
            list.add(student);
        }

        // 遍历这个ArrayList集合
        for (Student student : list) {
            System.out.println(student);
        }
    }

二:XML的约束

2.1 XML约束概述

​ XML的约束就是用来限定xml文件中可使用的标签以及属性

2.2 XML约束的分类
2.1.1 DTD约束技术
步骤
  1. 创建一个文件,这个文件名的后缀名为.dtd;
  2. 看xml文件中使用了哪些元素
  3. <!ELEMENT>可以定义元素
  4. 判断元素是简单元素还是复杂元素
  5. 简单元素:没有子元素
  6. 复杂元素:有子元素的元素
<?xml version="1.0" encoding="UTF-8" ?>
<!--注释的内容-->
<!--本XML用来描述多个学生的信息-->
<students>  复杂元素-------------------<!ELEMENT students(student)>
  <student id="1"> 复杂元素----------<!ELEMENT student(name,age)>
      <name>王五</name> 简单元素-----<!ELEMENT name(#PCDATA)> 表示元素为字符串
      <age>20</age>简单元素----------<!ELEMENT age(#PCDATA)> 表示元素为字符串
  </student>
</students>
引入DTD的三种方式
引入dtd的方式说明
引入本地的dtd
在xml文件内部引入
引入网络中的dtd
DTD 语法规则

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

简单元素

EMPTY:表示标签体为空

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

PCDATA:表示该元素的内容部分为字符串(用的最多)

复杂元素

直接写子元素的名称

有多个子元素可以使用",“或者”|"隔开

","表示定义子元素的顺序

"|"表示子元素只能出现任意一个

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

属性的类型

CDATA类型:普通的字符串

属性的约束

#REQUIREDL:必须的

#IMPLIED:属性不是必须的

#FIXED value:属性的值是固定的

<!ELEMENT persons (person +) > ---> 表示persons中person可以使用多次
<!ELEMENT person (name,age)>   ---> 表示person这个复杂标签有两个标签
<!ELEMENT name (#PCDATA)>	   ---> 表示name这个简单标签是简单字符串
<!ELEMENT age (#PCDATA)>	   ---> 表示name这个简单标签是简单字符串
2.1.2 schema约束技术
schema与dtd的区别
  1. schema约束文件也是一个xml文件,符合xml语法规则,文件后缀名为:xsd
  2. 一个xml文件可以引入多个schema约束文件,多个schema使用名称空间区分,(类似于java的包名)
  3. 在dtd中元素的类型比较单一,常见的是PCDATA类型,但是schema里面可以支持多种数据类型
  4. schema语法更为复杂一点

注意:schema文件事实上也是一个xml文件,可以用来约束其他的xml文件,但是同时,也有可能被其他的文件约束

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

引入schema约束
<persons
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="myXml"
  xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance person.xsd"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值