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();
    }
XML与DTD的更多相关文章
- 【PHP XML与dtd概述【完整版】】
		一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. vers ... 
- XML约束——DTD约束
		参考: 方立勋老师的讲课视频. 什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ... 
- xml约束DTD演示
		此演示xml和DTD在一个文件中 book.xml <?xml version="1.0" encoding="utf-8"?> <!DOCT ... 
- jdom dom4j解析xml不对dtd doctype进行验证(转)
		一.写在所有之前:因为dom4j和jdom在这个问题上处理的方法是一模一样的,只是一个是SAXBuilder 一个SAXReader,这里以jdom距离,至于dom4j只需要同理替换一下就可以了.二. ... 
- XML 和 DTD
		1.XML 1.1xml简介 a)xml,eXtensible Markup Language,可扩展标记语言,是一种标记语言: b)xml是一种非常灵活的语言,没有固定的标签,所有的额标签都可以自定 ... 
- 【JAVA与XML、dtd约束、Schema约束】
		一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ... 
- 【php基础】XML,DTD实例
		要求一:能看懂别人写的DTD文件,自己能写更好.例如products.dtd: <!ENTITY AUTHOR "John Doe"> <!ENTITY COMP ... 
- javaweb学习总结八(xml约束DTD)
		一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document ... 
- 关于XML的DTD概述
		1 DTD概述 1.1 什么是DTD DTD(Document Type Definition),文档类型定义,用来约束XML文档.或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XM ... 
- xml技术DTD约束定义
		XML约束 在XML技术中,可以编写一个文档来约束一个xml文档的书写规范,这称之为XML约束为什么需要XML约束? class.xml <stu><面积>?人怎么会有面积元素 ... 
随机推荐
- SQL注入漏洞的原理
			在平常生活中,我们登陆某网页,常常需要输入用户名和密码,点击登陆,即可登陆成功. 对于黑客来说,不需要用户名和密码,只输入 admin '— 也可以登陆成功. 黑客利用的这种漏洞就是SQL Injec ... 
- Java Http协议处理类
			public class HttpRequest { public static String doGet(String url,String params) throws Exception{ re ... 
- 格式化输出之 每行N个元素 list拆分
			for i in range(0,len(XSECT),5): out_BLDdat.write(' '.join( map('{:10.4f}'.format,XSECT[i:i+5]) ) + ' ... 
- vs2008 安装部署 启动项
			具体操作办法如下: 鼠标右键安装项目->视图->注册表 依次创建键: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion ... 
- java面试感悟【一】
			我最终选择不包装工作经验,或许是因为我怂,或许是因为一些莫名其妙的坚持…… 然而结果就是在boss上沟通了20多家,只有7家让我投了简历,1家跟我说要我发个时间段给他稍后告诉我面试时间,然后就没有然后 ... 
- Roslyn研究随笔
			Roslyn概述: http://blogs.ejb.cc/archives/7604/dotnet-compile-platform-roslyn-overview 使用Microsoft Rosl ... 
- mysql查看某个表的列名
			mysql查看某个表的列名mysql -uusername -p 输入密码按登录mysqlshow databases; 查看有哪些数据库use dbname; 选择数据库show tables:查看 ... 
- css的基础用法之标签选择
			一.css的4种引入方式 #.内联式 <p style="color: red;font-size: 50px;text-align: center">Egon是一个非 ... 
- [转]MySQL索引原理及慢查询优化
			MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位 ... 
- zend studio导入外部项目乱码怎么解决
			在zendstudio ide中,导入一个工程后,发现工程里面很多的文件都打上了红色的叉叉,打开这些文件一看,发现只要是有汉字存在的文件,都出现了乱码.按住alt+enter发现,该文件的编码默认为g ... 
