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");


            
            
        
        
       
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值