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><面积>?人怎么会有面积元素 ...
随机推荐
- js文件,同样的路径,拷贝过来的为什么不能访问
从解决方案管理器中拖过来的可以直接访问,而从 bundleconfig中拷贝过来后修改的就访问不到. 如下: 引用一: <script src="~/Content/Plugins/j ...
- 【Linux系列】Ubuntu ping通,xshell无法连接
现象描述:Ubuntu能Ping通主机,主机也能ping通虚拟机.而且,虚拟机也能上网.只是xshell不能连接. 解决方案: 一:使用管理员身份 设置防火墙. 先查看一下防火墙状态 sudo ufw ...
- c# usercontrol 用户自定义控件无法显示在工具箱的解决办法
由于最开始x86平台,后来换成anyCPU 重新编译也没有删除x86目录下的dll ,也没重新生成 费x86 下的dll , 导致工具箱无法找到目录下的dll 无法加载自定义控件 右击工具栏中的内容选 ...
- MSDos
一.简介 二.源码 http://www.computerhistory.org/atchm/microsoft-research-license-agreement-msdos-v1-1-v2- ...
- istio-jaeger-spring boot调用链配置
istio-jaeger-spring boot调用链配置 虽然,istio ingress controller已经生成了jaeger 记录所需要的信息,但是多个分布式之间没法清晰记录相互之间的依赖 ...
- 4K - 找新朋友
新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道 ...
- Java 8.9 游戏:井字游戏(C++&Java)
思路框架同8.20 : C++: #include<iostream> #include<string> using namespace std; class Chess { ...
- 可迭代对象(Iterable)和迭代器(Iterator)
迭代是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一 个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1. 可迭代对象 以直接作用于 ...
- sleep()方法和yield()方法有什么区别?
两者都是Thread类的静态方法,定义如下 public static void sleep(long millis) throws InterruptedException public stati ...
- match
//清空数据match (n) detach delete n (一)查询节点1.查询所有节点 //查询数据库中的所有节点 match(n)return n 2.查询带有某个标签的所有节点 //查询数 ...