什么是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. SQL注入漏洞的原理

    在平常生活中,我们登陆某网页,常常需要输入用户名和密码,点击登陆,即可登陆成功. 对于黑客来说,不需要用户名和密码,只输入 admin '— 也可以登陆成功. 黑客利用的这种漏洞就是SQL Injec ...

  2. Java Http协议处理类

    public class HttpRequest { public static String doGet(String url,String params) throws Exception{ re ...

  3. 格式化输出之 每行N个元素 list拆分

    for i in range(0,len(XSECT),5): out_BLDdat.write(' '.join( map('{:10.4f}'.format,XSECT[i:i+5]) ) + ' ...

  4. vs2008 安装部署 启动项

    具体操作办法如下: 鼠标右键安装项目->视图->注册表 依次创建键: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion ...

  5. java面试感悟【一】

    我最终选择不包装工作经验,或许是因为我怂,或许是因为一些莫名其妙的坚持…… 然而结果就是在boss上沟通了20多家,只有7家让我投了简历,1家跟我说要我发个时间段给他稍后告诉我面试时间,然后就没有然后 ...

  6. Roslyn研究随笔

    Roslyn概述: http://blogs.ejb.cc/archives/7604/dotnet-compile-platform-roslyn-overview 使用Microsoft Rosl ...

  7. mysql查看某个表的列名

    mysql查看某个表的列名mysql -uusername -p 输入密码按登录mysqlshow databases; 查看有哪些数据库use dbname; 选择数据库show tables:查看 ...

  8. css的基础用法之标签选择

    一.css的4种引入方式 #.内联式 <p style="color: red;font-size: 50px;text-align: center">Egon是一个非 ...

  9. [转]MySQL索引原理及慢查询优化

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位 ...

  10. zend studio导入外部项目乱码怎么解决

    在zendstudio ide中,导入一个工程后,发现工程里面很多的文件都打上了红色的叉叉,打开这些文件一看,发现只要是有汉字存在的文件,都出现了乱码.按住alt+enter发现,该文件的编码默认为g ...