day-16-(基础加强 XML)
来源:互联网 发布:云计算课程有什么 编辑:程序博客网 时间:2024/06/04 01:00
01.反射回顾_使用反射结合配置文件动态加载类并创建对象
1).之前我们使用的配置文件(xx.properties文件),如果配置大量数据时,可读性和可操作性 都有限,首先可读性下降,另外如果多个类有多个同名的属性,将不好配置。
2).基于以上的大量数据时的限制,所以以后在编写配置文件时,我们使用XML文件。
02.XML_XML概念:什么是XML
1.什么是XML:全名:Extensible Markup Language (可扩展的标记语言)
2.首先它是一个语言,他有他独立的语法;它与Java和其它编程无关。其次,什么是“标记”语言: 就是在文件中包含类似于张三,这种使用尖括号括起来的就叫做标记,这种标记同来标记数据的,也是给数据起的一个名字。另外标记可以嵌套,这样就使这些数据有了“层次感”,有了包含关系,所属关系,这样整个文档,尤其是在存储大量数据时,可读性,可维护性都非常好。
所以,XML文档就是一个“纯文本文档”,它是由“标记+数据”组成。标记用来标识数据。
3.例如:
建立文件:classes.xml ------------------------------------------------------------- <classes> <class> <id>1</id> <username>zhangsan</username> <password>1234</password> </class> <class> <id>2</id> <username>lisi</username> <password>4444</password> </class> <class> <id>3</id> <username>wangwu</username> <password>5555</password> </class> </classes>
03.XML_XML 概念 XML的作用
1.存储数据,【以后使用数据库存储】
student.xml ------------------------------------------------ <students> <student> <id>it001</id> <name>章子怡</name> <age>18</age> <sex>女</sex> </student> <student> <id>it002</id> <name>汪峰</name> <age>19</age> <sex>男</sex> </student> <student> <id>it003</id> <name>撒贝宁</name> <age>20</age> <sex>男</sex> </student> </students>
2.做配置文件:【以后重点应用方向】
<classes> <class> <id>1</id> <username>zhangsan</username> <password>1234</password> </class> <class> <id>2</id> <username>lisi</username> <password>4444</password> </class> <class> <id>3</id> <username>wangwu</username> <password>5555</password> </class> </classes>
04..XML_XML语法_文档声明
1.一个格式化良好的XML文档,应该有一个“文档声明”(不是必须要有);
2.文档声明的格式:
<?xml version = "1.0" encoding = "UTF-8" ?>
3.格式说明:
1).一个XML中最多只能有一个“文档声明”,而且必须在这个XML文档的0行0列;2).文档声明中只能有两个属性: a).version :[必须出现]说明此XML文档使用的版本号。取值只能是:"1.0"或者"1.1",常用是“1.0”。 b).encoding :[可以不出现]表示此XML文档使用的字符集。如果包含中文,要使用支持中文的字符集。例如:GBK、UTF-8;3).开始标记:"<?xml" 这三个符号之间不能有空格; 结束标记:"?>" 这两个符号之间不能有空格;
05.XML_XML语法_元素(标签)
1.元素:也叫:标记、标签。它是XML文件的重要组成部分。
2.标签的分类:
1).完整标签:有开始标签,和结束标签; <name>张三</name>2).单标签: 只有开始标签,没有结束标签,开始标签同时也是结束标签: 单标签可以通过属性来记录数据。 例如: <property name = "id" value = "it001"/>3).标签的语法: 1).标签名称中可以包含大部分的字符,包括中文,数字。 2).可以包含一下符号:“:” “_" "-" "." 。其他符号一般都不可以。 3).只能以 : 字母 下划线 冒号开头 4).示例: <2name></2name>//错误 <_name></_name>//正确 <.name></.name>//错误 <na2me></na2me>//OK的 <na me></na me>//错误 <na_me></na_me>//OK的 <na:me></na:me>//OK的4).标签内容: 1).可以是”数据“ 2).可以是”子标签“ <student> <name>张三</name> </student>5).标签名和标签的内容:全部是根据项目需求,由我们程序员自行定义。6).在一个XML文档中,标签名是区分大小写的: <age>20</age> <Age>22</Age>可以同时存在,解析时也可以被正确的解析出来。
06.XML_XML语法_属性
1.一个标签中可以定义任意多的”属性“,属性的作用:也是存储数据的。
2.例如:
<student id="it001" name="" id=""> <name>张三</name> <age>20</age> </student> <student id="it002"> <name>李四</name> <age>22</age> </student>
3.属性的语法规则:
1.一个标签可以定义0个或者多个属性,多个属性不能重名;多个属性之间使用空壳隔开。2.定义属性格式: 属性名=”属性值“ 属性名中不能包含:空格,冒号,而且必须以字母开头。 属性值必须要用一对双引号或者一对单引号括起来。 <student id = "it001">//OK的 <student id = 'it001'>//OK的 <student id = 'it001">//错误 <student id = 'it"001"'>//OK的 <student id = "it'001'">//OK的3.属性,不许定义在开始标签中。
07.XML_XML语法_注释
1).XML中的注释:
<!-- 注释内容 -->
2).注释的注意事项:
1).注释不能写在"文档声明"前面;2).注释不能嵌套。 <!-- <!-- 注释 --> -->3).注释不能写在标签内部: <name <!-- 注释 --> >章子怡</name>//错误
08.XML_XML语法_转义字符
1.例如标签有如下数据:
<code>a<b</code>
2.有些符号不能在”数据“中直接出现,例如: >,<等,如果数据中包含这些符号,可以使用XML中的”转义字符“:
1). < : < 2). > : > 3). " : " 4). ' : ' 5). & : &
3.示例代码:
<code> String str = "abc"; int count = 0; for(int i = 0 ;i < str.length(); i++){ char c = str.charAt(i); if(c >= 'a' && c <= 'z'){ count++; } } System.out.println("count = " + count);</code>
09.XML_XML语法_CDATA区
1.如果数据中包含大量的转义字符,编写时和可读性都不好。这时可以使用CDATA区来标识数据:
2.示例代码:
<code> <![CDATA[ String str = "abc"; int count = 0; for(int i = 0;i < str.length(); i++){ char c = str.charAt(i); if(c >= 'a' && c <= 'z'){ count++; } } System.out.println("count = " + count); ]]></code>
10.XML_XML解析DOM_SAX_PULL三种解析方式介绍
1.DOM解析:一次性将整个文档读取到内存中,并且会将内部的各种标签以及属性、数据等星系全部封装到相应的对象中,最终形成一个DOM(document)对象。 在DOM对象内部会保留文档的结构信息。
优点:内存中保留整个文档的结构,所以可以对文档结构进行修改,例如:增加元素,修改元素,删除元素等操作。缺点:如果文档很大,会很占用内存。
2.SAX解析:一次读取,解析一行,当读取下一行时,之前行的信息会被丢掉,类似于:熊瞎子掰苞米,掰一个扔一个。
优点:速度快。缺点:没有文档的整体结构,不能对文档元素进行增删改查。
3.PULL解析:用于Android系统内部的解析方式。类似于:sax。
11.XML_XML解析_几种解析器介绍
1).JAXP:sun公司提供支持DOM和SAX开发包。
2).JDom:dom4j兄弟
3).jsoup:一种处理HTML特定解析开发包
4).dom4j:第三方开发包。比较常用的解析开发包,hibernate底层采用。内部结合了dom和SAX的解析方式。
12.XML_XML解析_XML解析原理及DOM模型
1).将整个文档封装成一个:Document对象;
2).根元素封装成一个:Element对象,并存储到Document对象中;
3).将根元素中的所有子元素,每个都封装成一个Element对象,封装到根元素Element对象中
4).每个子元素的属性封装为:Attribute对象,子元素再次封装成Element对象,存储到当前子元素对象中
5).这种逐层封装的形式,最终形成一个:DOM树结构,通过最外层的Document对象就可以逐层向内部访问:
Document |--根元素(Element) |--子元素 |--属性对象(Attribute) |--值对象(String) |--子元素对象(Element) |--值对象(String) |--子元素对象 .... |--子元素对象(Element) ..... |--子元素 ....
13.XML_XML解析dom4j的使用步骤常用类和方法
1).dom4j是第三方工具包,使用前要先将所需jar包复制到项目目录下,并添加到构建路径:
dom4j-1.6.1.jar
2).使用步骤:
//1.创建SAXReader对象 SAXReader reader = new SAXReader(); //2.读取XML文件,生成Dom对象 Document dom = reader.read(new File("demo02.xml")); //3.获取根元素 Element root = dom.getRootElement(); //4.从根元素,获取内部的其它元素 ....
3).Element的常用方法:
1).public String getName():获取当前Element对象的"标签名"; 2).public List elements():获取当前Element对象下的所有子元素; 3).public List elements(String eleName):获取当前Element对象下的所有 eleName的子元素; 4).public String getText():获取当前Element对象的数据内容; 5).public String elementText(String eleName):获取当前Element对象的"eleName子元素的数据内容";
14.XML_XML解析案例实现读取student.xml
见:demo03
15.XML_约束的概念含义作用
1).XML文档中的标记是我们自己定义的,但是针对某个应用,这个XML文档中的标记(标签)应该是在某个范围内是规定好的,不能太随意定义。
2).当我们定义好XML文档中可以出现的标签后,为了防止一些意外,我们可以使用一种”约束文档”,将这些规则写入到这个”约束文档” 中,然后用这个约束文档对XML文件进行约束,就可以防止一些意外的标签存储到文件中。
3).XML的约束有两种:
1).DTD约束:比较简单,对一些简单的XML文件进行约束。 2).Schema约束:比较复杂,可以对一些比较复杂的XML文档进行更加细致、更加广泛的约束;
4).XML约束都可以约束:
1).根元素下都可以出现哪些子元素; 2).以及这些子元素的出现顺序,出现次数; 3).元素中可以包含哪些属性 4).元素中可以包含哪些子元素或者数据 ....
16.XML_DTD约束_DTD概述和DTD引入方式
1).内部DTD:缺点:DTD约束和XML文档混在一起,不利于查看,不利于维护。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans[ <!ELEMENT beans (bean*,import*) > <!ELEMENT bean (property*)> <!ELEMENT property (#PCDATA)> <!ELEMENT import (#PCDATA)> <!ATTLIST bean id CDATA #REQUIRED className CDATA #REQUIRED > <!ATTLIST property name CDATA #REQUIRED value CDATA #REQUIRED > <!ATTLIST import resource CDATA #REQUIRED> ]> <beans> </beans>
2).引入外部(本地)的DTD文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans SYSTEM "beans.dtd"> <beans> .... </beans>
3).引入外部(网络)的DTD文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> </beans>
17.XML_DTD约束_使用DTD约束XML文档
<?xml version="1.0" encoding="UTF-8"?>//对"元素"进行约束<!ELEMENT beans (bean*,import*) > //1.此约束对<beans>元素进行约束;2.下面只能有:bean和import两种子元素;而且bean元素必须在import元素之前;3.两个元素都可以出现0次或多次;<!ELEMENT bean (property*)> //1.对<bean>元素进行约束;2.下面只能有一个子元素:property,而且可以出现0次或多次;<!ELEMENT property (#PCDATA)> //1.对<property>元素进行约束;2.下面不能有子元素,必须是数据内容;<!ELEMENT import (#PCDATA)> //1.对<import>元素进行约束;2.下面不能有子元素,必须是数据内容//对"属性"进行约束<!ATTLIST bean id CDATA #REQUIRED //1.对<bean>元素的属性进行约束:2.只能有两个属性:id和className,这两个属性必须出现 className CDATA #REQUIRED><!ATTLIST property name CDATA #REQUIRED value CDATA #REQUIRED><!ATTLIST import resource CDATA #REQUIRED>
18.XML_Schema约束_Schema概述和Schema的引入方式
1).Schema能够提供比DTD更加强大的约束方式:例如:约束数据类型为:整数、浮点数。约束具体的出现的次数、次数范围。
2). Schema是新的XML文档约束;
Schema要比DTD强大很多,是DTD 替代者;
Schema本身也是XML文档,但Schema文档的扩展名为.xsd,而不是xml。
Schema 功能更强大,数据类型更完善
Schema 支持名称空间
3).Schema文档说明:
1).Schema文档的根元素必须是<schema>; <schema xmlns="http://www.w3.org/2001/XMLSchema" //指定此Schema文档所使用的约束文档的名称空间,固定值,就这么写 targetNamespace="hehe" //定义名称空间,给XML引入时使用的,我们可以自己定义 elementFormDefault="qualified"> //固定写法
3).引入方式:
在XML文档中,定义"根元素": <beans xmlns="hehe" //指定此XML所使用的Schema约束文档的名称空间,此值要跟Schema文件中的targetNamespace的值匹配。 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"//固定写法,表示此文件是一个"实例文档"--就是使用Schema约束的XML文档 xsi:schemaLocation="hehe beans.xsd" //指定Schema文件的位置:xsi:schemaLocation = "名称空间的值 schema文件的名">
19.XML_Schema约束_使用Schema约束约束XML文档
20.XML_Schema约束Schema练习通过规则需求写出Schema文档
1).根元素,无属性;
2).下面有两个子元素:、,这两个子元素可以不按顺序出现,可以出现0次到多次;
3).元素:
1).必须包含两个属性:"name"和"value" 2).包含一个子元素<property>,可以出现0次到多次;
4).元素:
1).必须包含一个属性:"resource" 2).没有元素内容,也没有子元素;
21..XML_Schema约束Schema练习阅读Schema文件写出XML文档
参考:demo07
学习目标总结:
01.能够说出XML的作用
1).存储数据[以后用数据库];2).配置文件【以后常用】
02.能够编写XML文档声明
<?xml version = "1.0" encoding = "UTF-8" ?>
03.能够编写符合语法的XML
1).标签的语法规则;2).属性的语法规则;3).注释4).转义字符5).CDATA区参考以上规则,可以写出合法的XML文档。
04.能够通过DTD约束编写XML文档
参考笔记17的分析
05.能够通过Schema约束编写XML文档
参考21
06.能够通过Dom4j解析XML文档【重点】
//1.创建SAXReaderSAXReader reader = new SAXReader();//2.读取xml文件,生成dom树Document dom = reader.read(new File("demo02.xml"));//3.获取根元素对象Element root = dom.getRootElement();//4.了解Element的常用方法: 1).public String getName():获取当前Element对象的"标签名"; 2).public List elements():获取当前Element对象下的所有子元素; 3).public List elements(String eleName):获取当前Element对象下的所有 eleName的子元素; 4).public String getText():获取当前Element对象的数据内容; 5).public String elementText(String eleName):获取当前Element对象的"eleName子元素的数据内容";
- day-16-(基础加强 XML)
- day-15-(基础加强_反射)
- 基础加强12-16
- java基础加强 + xml + HTTP 笔记整理
- 基础加强第五天 XML练习
- .NET基础加强第五天(XML文档)
- 基础加强
- 基础加强
- 基础加强
- 基础加强第四天 正则表达式和XML
- C#基础加强第四天总结--正则表达式和XML
- .NET基础加强第五天(xml文档dom)
- 16--黑马程序员--基础加强之注解
- Java基础:基础加强
- Java基础:基础加强
- xml加强笔记
- XML加强技能树
- day 02xml解析
- Android Studio升级至3.0所遇到的问题
- Calendar 显示一个月后的今天是星期几
- singular value decompositionSVD奇异值分解(待理解)
- day-15-(基础加强_反射)
- Spring学习笔记(十) --- 浅析Spring MVC的工作机制
- day-16-(基础加强 XML)
- Warning:Conflict with dependency 'com.android.support:support-annotations'
- HDU 4632 Palindrome subsequence(区间DP)
- 创建,删除账户,创建删除用户组
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误
- spring boot + redis 实现session共享
- Java消息中间件学习笔记六 -- Spring JMS理论
- bootstrap 让文字显示在响应式图片上