• XML


     

    为了灵活实现的不同路径(/hello)执行不同的资源( HeIIoMyServlet)我们需要使用XML进行配置;为了限定XML内容,我们需要使用xml约束(DTD或schema);为了获得xml的内容,我们需要使用dom4j进行解析。

    XML:

      XML个称为Extensible Markup Language,意思是可扩展的标记语言。XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的。我们要学习的还是1.0版本!!!

      语法:

        1.文档声明必须为<?xml开头,以?>结束;

        2.文档声明必须从文档的0行0列位置开始:

        3.文档声明只有属性:

           versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;

           encoding:指定当前文档的编码。可选属性,默认值是。utf-8:

        元素element

           1.元素是XML文档中最重要的组成部分,

          2.普通元素的结构开始标签、元素体、结束标签组成。例如:<hello>大家好</hello>

          3.元素体:元素体可以是元素,也可以是文本,例如:<b><a>你好</a ></b>

          4.空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭介,例如:<c/>

          5.元素命名:

          a)     区分大小写

          b)     不能使用空格,不能使用冒号:

          c)      不建议以XML,  xml,  Xml开头

        6.格式化良好的XML文档,必须只有一个根元素。

        属性

         1.属性是元素的一部分,它必须出现在元素的开始标签中

        2.属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引

        3.一个元素可以有O ~ N个属性,但一个元素中不能出现同名属性

        4.属性名不能使用空格、冒号等特殊字符,且必须以字母开头

        注释

        XML的注释与HTML相同,即以“<!--”开始,以“-->”结束。注释内容会被XML解析器忽略!

          转义字符

        XML中的转义字符与HTML一样。

        因为很多符号己经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符,例如:"<"、”>”、” ’ ”、” ” ”、”&”。

         

        CDATA区

           当大量的转义字符出现在xml文档中时,会使xml文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。

          在CDATA段中出现的“<”、“>’,、“””、“‘”、“&”,都无需使用转义字符。这可以提高xml文档的可读性。

               在CDATA段中不能包含“]]>”,即CDATA段的结束定界符。

        代码:

          

    <?xml version="1.0" encoding="UTF-8"?>
    <school>
    <!-- 班级 -->
    <java0803 num="7">
    <student1 name="小红帽 " age="18"></student1>
    <student1 name="大灰狼" age="19"></student1>
    </java0803>

    <a>
        a&lt;b
        <![CDATA[
        
        if(a>b&&a>=10){
        
        }
        ]]>
    </a>
    </school>

    DTD:

      DTD (Document Type Definition ),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

      

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
    <web-app>
    <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.oracle.demo01.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>
    </web-app>

      语法:

    1. 内部DTD,在XML文档内部嵌入DTD,只对当前XML有效。

       

    <?xml version="1.0" encoding="UTF-8"? standalone="yes" ?>

    <!DOCTYPE web-app [

       ...//具体语法

    ]>

    <web-app>

    </web-app>

      

       2.外部DTD——本地DTD,DTD文档在本地系统上,公司内部自己项目使用。

        

        3:外部DTD——公共DTD,DTD文档在网络上,一般都有框架提供。

          

         元素声明:

            定义元素语法:<!ELEMENT元素名 元素描述>

               元素名:自定义

                元素描述包括 : 符号和数据类型

                   常见符号: ?  *  +  ()  |  ,

                   常见类型:#PCDATA表示内容是文本,不能是子标签

            

    符号

    符号类型

    描述

    示例

    ?

    问号

    表示该对象可以出现,但只能出现一次

    (菜鸟?)

    *

    星号

    表示该对象允许出现任意多次,也可以是零次

    (爱好*)

    +

    加号

    表示该对象最少出现一次,可以出现多次

    (成员+)

    ()

    括号

    用来给元素分组

    (古龙|金庸|梁羽生),

    (王朔|余杰),毛毛

    |

    竖条

    表明在列出的对象中选择一个

    (男人|女人)

    ,

    逗号

    表示对象必须按指定的顺序出现

    (西瓜,苹果,香蕉)

          代码:

            

    <!ELEMENT  web-app(servlet*,servlet-mapping*,welcome-file-list?)>
        web-app包括3个标签,且必须顺序出现。
            servlet子标签个数任意
            servlet-mapping子标签个数任意
            welcome-file-list子标签最多只能出现一次
    <!ELEMENT servlet(servlet-name,description?,(servlet-class|jsp-file))>
        servlet有3个子标签,且必须顺序出现
            servlet-name,必须有,且只能出现1次
            description,可选1次
            servlet-class和jsp-file二选一,且只能出现一次
    <!ELEMENT servlet-name(#PCDATA)>
        servlet-name的标签体必须是文本
    <!ELEMENT  welcome-file-list  (welcome-file+)>
          welcome-file-list至少有1个子标签welcome-file

          属性声明:

              

               

               

     Schema约束:

          Schema是新的XML文档约束:

           Schema要比DTD强大很多,是DTD替代者;

          Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml .

          Schema功能更强大,数据类型更完善

          Schema支持名称空间

         

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://www.example.org/web-app_2_5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
        version="2.5">
        <servlet>
            <servlet-name>MyServlet</servlet-name>
            <servlet-class>com.oracle.demo02.MyServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>MyServlet</servlet-name>
            <url-pattern>/MyServlet</url-pattern>
        </servlet-mapping>
    </web-app>

    dom4j解析:

        常用方式:

            

    1. DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。

        a)       优点:元素与元素之间保留结构关系,故可以进行增删改查操作。

        b)       缺点:XML文档过大,可能出现内存溢出显现。

    1. SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件         驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解)

        a)     优点:处理速度快,可以处理大文件

        b)     缺点:只能读,逐行后将释放资源。

        3.     PULL:  Android内置的XML解析方式,类似SAX。(了解)

        解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包。

         常见的解析开发包:

         JAXP: sun公司提供支持DOM和SAX开发包

         JDom:dom4j兄弟

          jsoup:一种处理HTML特定解析开发包

          dom4j:比较常用的解析开发包,hibernate底层采用。

        解析原理:

            

         

          如果需要使用dom4j,必须导入jar包。

           dom4j必须使用核心类SaxReader加载xml文档获得Document通过Document对象获得文档的根元素,然后就可以操作了。

          

           步骤:

          1.获取解析器

          2.获得document文档对象

          3.获取根元素

          4.获取根元素下的子元素

          5.遍历子元素

          6.判断元素名称为servlet的元素

          7.获取servlet-name元素

          8.获取servlet-class元素

          代码:

            

    public class MyServlet {
    public void init(){
        System.out.println("MyServlet对象被创建了");
    }
    public void service(){
        System.out.println("MyServlet被访问了");
    }
    public void destroy(){
        System.out.println("MyServlet被销毁了");
    }
    }
    public class Demo01 {
    
        public static void main(String[] args) throws DocumentException, ClassNotFoundException, InstantiationException, IllegalAccessException {
            //创建SaxReader对象
            SAXReader sax=new SAXReader();
            //加载xml文件,获取整个文档对象
            Document doc=sax.read("src/com/oracle/demo02/web.xml");
            //获取根元素对象web-app
            Element root=doc.getRootElement();
            //获取Servlet标签对象
            Element servlet=root.element("servlet");
            //获取Servlet-class标签对象
            Element servletClass=servlet.element("servlet-class");
            //获取文本值
            String className=servletClass.getText();
            //获取字节码文件对象
            Class c=Class.forName(className);
            System.out.println(c);
            //快速创建对象
            MyServlet my=(MyServlet)c.newInstance();
            my.init();
            my.service();
            my.destroy();
        }
    
    }
  • 相关阅读:
    排序规则
    revert
    添加字段modify
    修改字段名change
    修改字段注释modify
    修改字段类型modify
    file类型input框赋值
    disabled
    js失去焦点触发
    别把软件开发当做养家糊口的工具...
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/13948972.html
Copyright © 2020-2023  润新知