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). < : &lt;    2). > : &gt;    3). " : &quot;    4). ' : &apos;    5). & : &amp;

3.示例代码:

<code>        String str = &quot;abc&quot;;        int count = 0;        for(int i = 0 ;i &lt; str.length(); i++){            char c = str.charAt(i);            if(c &gt;= &apos;a&apos; &amp;&amp; c &lt;= &apos;z&apos;){                count++;            }        }    System.out.println(&quot;count = &quot; + 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子元素的数据内容";
原创粉丝点击