java——XML、XML解析、设计模式

XML概述

  • XML时扩展性标记语言(eXtensible Markup Language)的缩写,他是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据
  • XML的使用场景:XML内容经常被当消息进行网络传输,或者作为配置文件用于存储系统的信息

XML的语法的规则

  • XML文件的后缀名为:xml
  • 文档声明必须是第一行
    在这里插入图片描述
    标签由一对尖括号和合法标识符组成: <name></name>,必须存在一个根标签,有且只能有一个。
    标签必须成对出现,有开始,有结束: <name></name>
    特殊的标签可以不成对,但是必须有结束标记,如:<br/>
    标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来<student id = “1”></name>
    标签需要正确的嵌套

XML文件中可以定义注释信息:<!– 注释内容 -->
XML文件中可以存在以下特殊字符
在这里插入图片描述

XML文件中可以存在CDATA区: <![CDATA[ …内容… ]]>

<?xml version="1.0" encoding="UTF-8" ?>
<student>
    <name>女儿国王</name>
    <sex></sex>
    <hobby>唐僧,追唐僧</hobby>
    <info>
        <age>30</age>
        <addr>女儿国</addr>
    </info>
    <sql>
        select * from user where age &lt; 18;
        select * from user where age &lt; 18 &amp;&amp; age &gt; 10;
        <![CDATA[
        select * from user where age < 18 && age > 10;
        ]]>
    </sql>
</student>

XML的组成格式要求是什么样的?
文件后缀必须是xml
文档声明必须是第一行
必须存在一个根标签,有且只能有一个
XML文件中可以定义注释信息:<!– 注释内容 -->
标签必须成对出现,有开始,有结束标签:
必须能够正确的嵌套
什么是文档约束
由于XML文件可以自定义标签,导致XML文件可以随意定义,程序在解析的时候可能出现问题
文档约束:是用来限定xml文件中的标签以及属性应该怎么写
需求:利用DTD文档约束,约束一个XML文件的编写。
分析:
①:编写DTD约束文档,后缀必须是.dtd
在这里插入图片描述

②:在需要编写的XML文件中导入该DTD约束文档
③:按照约束的规定编写XML文件的内容。

//data.dtd文件
<!ELEMENT 书架 (书+)>
        <!ELEMENT  (书名,作者,售价)>
        <!ELEMENT 书名 (#PCDATA)>
        <!ELEMENT 作者 (#PCDATA)>
        <!ELEMENT 售价 (#PCDATA)>

//xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 书架 SYSTEM "data.dtd">
<书架>
    <>
        <书名>女儿国王</书名>
        <作者></作者>
        <售价>唐僧,追唐僧</售价>
    </>
    <>
        <书名>人鬼情未了</书名>
        <作者>李四  </作者>
        <售价>唐僧,追唐僧</售价>
    </>


</书架>

文档约束-schema

  • schema可以约束具体的数据类型,约束能力上更强大
  • schema本身也是一个xml文件,本身也受到其他约束文件的要求,所以编写更加严重
  • XML文档约束-schema的优点
  • 可以约束XML文件的标签内容格式,以及具体的数据类型

XML解析

XML数据的作用,最终需要怎么处理?

  • 存储数据、做配置信息,进行数据传输。
  • 最终需要被程序进行读取,解析里面的信息
    什么是XML解析
  • 使用程序读取XML中的数据
    两种解析凡是
  • SAX解析
  • DOM解析(重点)
    在这里插入图片描述
<?xml version="1.0" encoding="UTF-8" ?>
<students>
    <!--第一个学生信息-->
    <student id="1">
        <name>张三</name>
        <age>23</age>
    </student>
    <!--第二个学生信息-->
    <student id="2">
        <name>李四</name>
        <age>24</age>
    </student>
</students>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<contactList>
    <contact id="1" vip="true">
        <name>   潘金莲  </name>
        <gender></gender>
        <email>panpan@itcast.cn</email>
    </contact>
    <contact id="2" vip="false">
        <name>武松</name>
        <gender></gender>
        <email>wusong@itcast.cn</email>
    </contact>
    <contact id="3" vip="false">
        <name>武大狼</name>
        <gender></gender>
        <email>wuda@itcast.cn</email>
    </contact>
    <user>
    </user>
</contactList>

package com.itheima.d1_dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.io.File;
import java.io.InputStream;

/**
 * 目标:学会使用dom4j解析XML文件中的数据
 * 1.导入dom4j框架
 * 2.准备一个xml文件
 */
public class Demo4JHelloWorldDemo1 {
    @Test
    public void parseXMLData() throws Exception {
        //1. 创建一个Dominatedj的系欸其对象,代表了整个代表了整个Dom4j框架
        SAXReader saxReader=new SAXReader();
        //2.把XML文件加载到内存中称为一个Domcument文档对象
        //注意:/是直接去src下寻找文件
        InputStream is=Demo4JHelloWorldDemo1.class.getResourceAsStream("/Contacts.xml");
        Document document=saxReader.read(is);
        //3.获取跟元素对象
        Element root=document.getRootElement();
        System.out.println(root.getName());

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值