什么是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. js iterable类型

    遍历Array可以采用下标循环,遍历Map和Set就无法使用下标.为了统一集合类型,ES6标准引入了新的iterable类型,Array.Map和Set都属于iterable类型. 具有iterabl ...

  2. git 分支强制删除

    添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支. 现在,你终于接 ...

  3. ipv6地址累加函数

    #include <stdio.h> #include <arpa/inet.h> int main() { int i; int ret; struct in6_addr a ...

  4. Laravel 5.5 + Vue 开发单页应用

    上次我用 laravel5.3 + Vue 开发了一个简单的单页应用,这次我打算将其升级到 laravel5.5,在升级的过程中,做一下记录,其源码放在 github 上面,源码地址   开发环境 软 ...

  5. DOM BOM 常用API小记

    DOM 1.元素节点: 元素节点element: 更精确的获得元素的标签名(全大写) 属性节点attribute: 属性名 文本节点text: #text 注释节点document:#document ...

  6. 常用jvm参数

    如果你是Eclipse ,可以通过 run -> Run Configurations->Arguments 添加-XX:+PrintGCDetails 打开gc日志 -Xmx 设置jav ...

  7. Spring 常见注解

    @Component:标准一个普通的spring Bean类. @Controller:标注一个控制器组件类. @Service:标注一个业务逻辑组件类. @Repository:标注一个DAO组件类 ...

  8. DOM-DOMTree-查找

    1. 什么是DOM: Document Object Model 专门操作网页内容的API js=ES+DOM+BOM DOM是由W3C指定的API标准 为什么: 为了统一各个浏览器操作网页内容的AP ...

  9. python之数据库内置方法以及pymysql的使用

    一.mysql内置方法 1)视图的概念和用法 .什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 .为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 .如何用视 ...

  10. tms web core 里面调用pascal 过程。

    procedure show(s:string);begin  showmessage(s);end; procedure TForm3.WebButton1Click(Sender: TObject ...