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><面积>?人怎么会有面积元素 ...
随机推荐
- ckplayer iis6 mp4 播放404错误
设置mime. 1.右键网站 2.选择http头 3.点击编辑MIME按钮 4.新增MIME类型 5.在“扩展名”框内输入“mp4”,“MIME类型”框中输入“video/x-mp4” ps:类型不要 ...
- 引入flash
调用代码 <div class="media"> <object class="main_video_box" classid="c ...
- Vue 初始化多个Vue 及之间的相互修改
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- git 本地仓库与远程仓库的连接
在远程如github新建一个项目名称为blog, 本地项目为store,是一个laravel框架项目,首先用 git init初始化本目,然后用git remote add origin git@gi ...
- laravel框架一次请求的生命周期
第一件事所有的请求都会被web服务器(Apache/Nginx)导向public/index.php文件.index.php文件载入Composer生成的自动加载设置,然后从bootstrap/app ...
- html标签三
1.下拉框和下拉表框 <select name="" id="" multiple> <option value="xx" ...
- 11. 标准库浏览 – Part II
第二部分包含了支持专业编程工作所需的更高级的模块,这些模块很少出现在小脚本中. 11.1. 输出格式 reprlib 模块为大型的或深度嵌套的容器缩写显示提供了 :repr() 函数的一个定制版本: ...
- PAT 1009 说反话 (20)(代码)
1009 说反话 (20)(20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空 ...
- 详解php多人开发环境原理
作为一名php开发人员,有时候一个项目或一个功能我们不能独自完成,就像当一个仓库开发人员大于1,20人的时候,每个人可能开发不同的模块和功能,用代码版本控制工具比如 git 开不同的分支,流程大概是先 ...
- spring Springmvc mybatis maven整合
一.准备工作 1. 首先创建一个表: CREATE TABLE `t_user` ( `USER_ID` int(11) NOT NULL AUTO_INCREMENT, `USER_NAME` ch ...