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 < 18;
select * from user where age < 18 && age > 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());
}
}