什么是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的更多相关文章

  1. 【PHP XML与dtd概述【完整版】】

    一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. vers ...

  2. XML约束——DTD约束

    参考: 方立勋老师的讲课视频.   什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...

  3. xml约束DTD演示

    此演示xml和DTD在一个文件中 book.xml <?xml version="1.0" encoding="utf-8"?> <!DOCT ...

  4. jdom dom4j解析xml不对dtd doctype进行验证(转)

    一.写在所有之前:因为dom4j和jdom在这个问题上处理的方法是一模一样的,只是一个是SAXBuilder 一个SAXReader,这里以jdom距离,至于dom4j只需要同理替换一下就可以了.二. ...

  5. XML 和 DTD

    1.XML 1.1xml简介 a)xml,eXtensible Markup Language,可扩展标记语言,是一种标记语言: b)xml是一种非常灵活的语言,没有固定的标签,所有的额标签都可以自定 ...

  6. 【JAVA与XML、dtd约束、Schema约束】

    一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...

  7. 【php基础】XML,DTD实例

    要求一:能看懂别人写的DTD文件,自己能写更好.例如products.dtd: <!ENTITY AUTHOR "John Doe"> <!ENTITY COMP ...

  8. javaweb学习总结八(xml约束DTD)

    一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document ...

  9. 关于XML的DTD概述

    1 DTD概述 1.1 什么是DTD DTD(Document Type Definition),文档类型定义,用来约束XML文档.或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XM ...

  10. xml技术DTD约束定义

    XML约束 在XML技术中,可以编写一个文档来约束一个xml文档的书写规范,这称之为XML约束为什么需要XML约束? class.xml <stu><面积>?人怎么会有面积元素 ...

随机推荐

  1. python3.5.2中文字符乱码问题解决

    >>> str = "世界你好!" >>> b = str.encode('utf-8') >>> type(b) <c ...

  2. (轉)JSON.stringify 语法实例讲解

    作用:这个函数的作用主要是为了系列化对象的. 可能有些人对系列化这个词过敏,我的理解很简单.就是说把原来是对象的类型转换成字符串类型(或者更确切的说是json类型的).就这么简单.打个比方说,你有一个 ...

  3. poj 3624 && hdu 2955(背包入门)

    http://poj.org/problem?id=3624 背包中最基础的01背包,大意是有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总 ...

  4. Cookie 和 Session 的区别和联系?session的生命周期?多个服务器部署session的管理?

    一.session 和 cookie 1.cookie Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie.当下次客户端再向服务端发起请求时,客户端会 ...

  5. delphi程序设计改进可读性一法

    Delphi,Lazarus程序设计改进一法 作者:steven QQ:1565498246 Delphi/Lazarus有一个思想就是方法.函数名调用,后边可以不使用括号(),比如调用函数Now,这 ...

  6. sex在软件开发中的运用--SIX技术

    开篇:省略xxx字 keyword:sex . female, male .SIX ,sex integer extention technolgolsl 前言: 对于sex字段的研究,国内,国际尚为 ...

  7. Win 10 关闭了.net framework 3.5后再开启不成功

    背景: Win10 想要使用IETester来测试下页面的浏览器兼容性.在“控制面板”里关闭了.net framework 3.5,再重新开启. 问题: 在重新开启的时候,提示不成功.错误代码0x80 ...

  8. android DatagramSocket send 发送数据出错

    安卓4.0以后好像不能在主线程里面使用 socket 所以不管是发送数据还是接收数据需要新开一个了线程: 以下代码是我点击发送是代码: new Thread(new Runnable() { @Ove ...

  9. oracle 笔记DBA

    1.1oracle开启归档 关闭数据库 SQL>archive log list; SQL>shutdown immediate; SQL>startup mount ; SQL&g ...

  10. idea maven编译jdk报错

    <!--自己添加的,用来控制maven编译时的jdk版本--> <plugins> <plugin> <groupId>org.apache.maven ...