zoukankan      html  css  js  c++  java
  • XML与DTD

    什么是XML

    XML个称为Extensible Markup Language,意思是可扩展的标记语言。

    应用常见

    配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
    <web-app>
        <servlet>
            <servlet-name>HelloServlet</servlet-name>
            <servlet-class>com.oracle.HelloServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    <?xml version="1.0" encoding="UTF-8"?>
    
    -<person>
    
    
    -<person1>
    
    <name>张三</name>
    
    <age>18</age>
    
    </person1>
    
    <!--这是注释标签 -->
    
    
    
    -<person2>
    
    <name>张三</name>
    
    <age>>18</age>
    
    -<![CDATA[
                if(a>b&&a<b){
                    a=b;
                }
            ]]>
    </person2>
    
    </person>

    元素命名:

        区分大小写

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

        不建议以XML,  xml,  Xml开头

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

    什么是DTD

     DTD (Document Type Definition ),文档类型定义,用来约束XML文档

    规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
        模拟servlet2.3规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
        格式如下:
        <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
    -->
    <!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >
    <!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
    <!ELEMENT servlet-mapping (servlet-name,url-pattern+) >
    <!ELEMENT servlet-name (#PCDATA)>
    <!ELEMENT servlet-class (#PCDATA)>
    <!ELEMENT url-pattern (#PCDATA)>
    <!ELEMENT description (#PCDATA)>
    <!ELEMENT jsp-file (#PCDATA)>
    
    <!ELEMENT welcome-file-list (welcome-file+)>
    <!ELEMENT welcome-file (#PCDATA)>
    
    <!ATTLIST web-app version CDATA #IMPLIED>

     元素声明

    定义元素语法:<!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

      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></servlet-name>
            <servlet-class></servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name></servlet-name>
            <url-pattern></url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file></welcome-file>
            <welcome-file></welcome-file>
        </welcome-file-list>
    </web-app>

    dom4j解析

     DOM解析原理及结构模型

    API使用

    public class Demo01 {
        public static void main(String[] args) throws Exception {
            //1.获取解析器
            SAXReader saxReader=new SAXReader();
            //2.获得document文档对象
            Document doc=saxReader.read("src/com/oracle/demo03/web.xml");
            //3.获取根元素
            Element rootElement=doc.getRootElement();
            //获取元素名称
            //System.out.println(rootElement.getName());
            //获取元素中的指定属性的属性值
            //System.out.println(rootElement.attributeValue("version"));
            //4.获取根元素下的所有子元素
            List<Element> childElements=rootElement.elements();
            //5.遍历子元素
            for(Element element:childElements){
            //6.判断元素名称为servlet的元素
                if("servlet".equals(element.getName())){
            //7.获取servlet-name元素
                    Element servletName=element.element("servlet-name");
            //8.获取servlet-class元素
                    Element servletClass=element.element("servlet-class");
                    System.out.println(servletName.getText());
                    System.out.println(servletClass.getText());
                }
            }
        }
    }

    案例实现:

    准备工作

    package com.oracle.demo03;
    
    public interface MyServlet {
        public void init();
        public void service();
        public void destory();
    }
    public class MyServletImp implements MyServlet{
    
        public void init() {
            System.out.println("初始化");
            
        }
        public void service() {
            System.out.println("工作");
            
        }
        public void destory() {
            System.out.println("死亡");
            
        }
    
    }
    public class Demo {
        public static void main(String[] args) throws Exception {
            //1.解析对象
            SAXReader saxReader=new SAXReader();
            //2.获取document对象
            Document doc=saxReader.read("src/com/oracle/demo03/web.xml");
            //3.获取根元素
            Element rootElement=doc.getRootElement();
            //4.获取根元素下的所有子元素
            List<Element> childElements=rootElement.elements();
            String className=null;
            for(Element element:childElements){
                if("servlet".equals(element.getName())){
                    className=element.element("servlet-class").getText();    
                }
            }
            //5.创建字节码对象
            Class c=Class.forName(className);
            MyServletImp myservlet=(MyServletImp)c.newInstance();
            myservlet.init();
            myservlet.service();
            myservlet.destory();
        }public class Demo {
        public static void main(String[] args) throws Exception {
            //1.解析对象
            SAXReader saxReader=new SAXReader();
            //2.获取document对象
            Document doc=saxReader.read("src/com/oracle/demo03/web.xml");
            //3.获取根元素
            Element rootElement=doc.getRootElement();
            //4.获取根元素下的所有子元素
            List<Element> childElements=rootElement.elements();
            String className=null;
            for(Element element:childElements){
                if("servlet".equals(element.getName())){
                    className=element.element("servlet-class").getText();    
                }
            }
            //5.创建字节码对象
            Class c=Class.forName(className);
            MyServletImp myservlet=(MyServletImp)c.newInstance();
            myservlet.init();
            myservlet.service();
            myservlet.destory();
        }
  • 相关阅读:
    马拉车算法【Manachar】
    AcWing算法进阶课 基础算法 启发式合并
    iframe嵌套跨域子页面变化高度自适应
    js数组中的每一项异步请求
    利用geo3d地图数据画地图上面的柱子
    地图上面加柱状图组
    antd-select选项位置偏移问题解决
    git
    React
    前端面试题
  • 原文地址:https://www.cnblogs.com/qq1312583369/p/10224773.html
Copyright © 2011-2022 走看看