Java ModelI和ModelII DTD文件解析 DOM4J基础应用

1.Model I模式开发

    1.Model I模式开发Web应用时,分为两种情况:

        1.纯jsp技术方式开发         2.JSP+javaBean方式开发

    2.Model I模式的不足:

        1.JSP页面中嵌入大量Java代码,可读性差。         2.大量代码在JSP中难以复用。         3.后期维护及扩展的难度大。

2.Model II模式与MVC设计模式

    1.Model II模式体现了基于MVC的设计模式,简单来说,Model II模式就是将数据显示、流程控制和业务逻辑处理分离,使之相互独立。

    

    2.MVC设计模式

        1.MVC设计模式由3个部分组成             Model:模型,主要用于数据和业务的处理。             View:视图,用于数据的显示。             Controller:控制器,用于进行流程控制。         2.MVC设计模式的特点             一个模型可以对应多个视图。             显示与逻辑控制的分离。             分层控制,减低了代码间的偶合。             

3.DTD的概念和作用

    1.DTD简介

        DTD是Document Type Definition的缩写,即文档类型的定义。         

    2.DTD的作用如下

        1.DTD使每个xml文件可以携带一个自身格式的描述。         2.DTD使不同组织的人可以使用一个通用DTD来交换数据。         3.DTD使应用程序可以使用一个标准DTD校验从外部接收的XML数据是否有效。     

    3.DTD的声明

        语法:             <!DOCTYPE 根元素 [定义内容]>                      示例:            
<?xml version="1.0"?>
            <!DOCTYPE poem[
                <!ELEMENT poem (author,title,content) >
                <!ELEMENT author (#PCDATA) >
                <!ELEMENT title (#PCDATA)  >
                <!ELEMENT content (#PCDATA) >
            ]>
            <poem>
                <author>王维</author>
                <title>鹿踩</title>
                <content>空山不见人,但闻人语声。返景入深林,复照青苔上。</content>
            </poem>

            
        将DTD嵌入XML文件中用于验证描述诗集的XML,称为内部DTD文档。
            

    4.使用外部DTD验证XML

        存储DTD的文件一般以.dtd作为文件的扩展名。         语法:             <!DOCTYPE 根元素 SYSTEM "DTD文件路径">             DOCTYPE、SYSTEM是关键字。                          示例:          
  <?xml version="1.0" encoding="utf-8"?>
            <!DOCTYPE poems SYSTEM "poems.dtd">
            <poems createYear="2011">
                <poem>
                    <title>春晓</title>
                    <author>孟浩然</author>
                    <year>732</year>
                    <content>春眠不觉晓.....</content>
                </poem>
            </poems>

            

    5.DTD元素

        1.DTD元素定义语法:            
<!ELEMENT NAME CONTENT>

                ELEMENT是关键字
                NAME是元素名称
                CONTENT是元素类型
        常用的元素类型如下:
            #PCDATA,可以包含任何字符数据,但是不能在其中包含任何子元素,例如:
            
<!ELEMENT title (#PCDATA)>

            纯元素类型,只包含子元素,并且这些子元素外没有文本,例如:
            
<!ELEMENT poems (poem*) >

            
        2.DTD元素中某些符号的用途
        符号    用途                                                 示例                                                          示例说明
        ()        用来给元素分组                               (古龙|金庸|梁羽生),(王朔|余杰),毛毛       表示分为三组
        |        在列出的对象中选择一个                  (男人|女人)                                              表示"男人"或者"女人"必须出现,并且两者至少选一
        ,        对象必须按指定的顺序出现              (西瓜,苹果,香蕉)                                      表示"西瓜""苹果""香蕉"必须出现,并且按这个顺序出现
        *        该对象允许出现0到多次                   (爱好*)                                                     表示"爱好"可以出现0次到多次
        ?        该对象可以出现0次到1次                (菜鸟?)                                                     表示"菜鸟"可以出现0次到1次
        +        该对象最少出现1次到多次              (成员+)                                                     表示"成员"必须出现,而且可以出现多次
        

    6.DTD属性

        1.DTD属性声明语法如下:             <!ATTLIST 元素名称 属性名称 属性类型 属性默认值>                  2.DTD元素中属性类型的描述如下:             属性类型        说明             CDATA             表示字符数据             ID                表示唯一ID             IDREF            表示为另一个元素的id             IDREFS            表示其他id的列表             ENTITY            表示一个实体             ENTITLES        表示一个实体列表                  3.DTD元素中属性值的描述             值                说明             #REQUIRED        属性值是必须的             #IMPLIED        属性值不是必须的             #FIXED            属性值是固定的             

4.XML文档解析

    1.DOM4J概述

        DOM4J是一个易用的,开源的库,可以实现对XML文档的解析。     

    2.使用DOM4J操作XML数据

        1.Document对象相关          
  SAXReader reader = new SAXReader();
            Document document = reader.read(new File("input.xml"));

            
        2.节点相关
            1.获取文档的根元素
                
Element rootElm = document.getRootElement();

            2.取得某节点的单个子节点
               
 Element memberElm = root.element("member");  //"member"是节点名

            3.取得节点的文字
               
 String text = memberElm.getText();

            4.取得某节点下名为"member"的所有子节点并遍历
               
 List nodes = rootElm.elements("member");
                for(Iterator it = nodes.iterator();it.hasNext();){
                    Element elm = (Element)it.next();
                }

            5.对某节点下的所有子节点进行遍历
              
  for(Iterator it = root.elementIterator;it.hasNext();){
                    Element element = (Element)it.next();
                }

            6.在某节点下添加子节点
             
   Element ageElm = newMemberElm.addElement("age");

            7.设置节点文字
              
  ageElm.setText("29");

            8.删除某节点
               
 parentElm.remove(childElm); //childElm是待删除的节点,parentElm是其父节点。

            9.添加一个CDATA节点
                
Element contentElm = infoElm,addElement("content");
                contentElm.addCDATA(diary.getContent());
                contentElm.getText();  //特别说明:获取街道的CDATA值与获取节点的值是用一个方法
                contentElm.clearContent();//清除节点中的内容,CDATA亦可

        

        3.属性相关

            1.取得某节点下的某属性              
  Element root = document.getRootElement();
                Attribute attribute = root.attribute("size"); //属性名name

            2.获取属性的文字
             
   String text = attribute.getText();

            3.遍历某节点的所有属性
               
 Element root = document.getRootElement();
                for(Iterator it = root.attributeIterator();it.hasNext()){
                    Attribute attribute = (Attribute)it.next();
                    String text = attribute.getText();
                    System.out.PRintln(text);
                }

            4.设置某节点的属性和文字
               
 newMemberElm.addAttribute("name","sitinspring");

            5.设置属性的文字
                
Attribute attribute = root.attribute("name");
                attribute.setText("sitinspring");