JavaEE——XML

什么是XML

XML个称为Extensible Markup Language,意思是可扩展的标记语言。

应用常见

配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
 3 <web-app>
 4     <servlet>
 5         <servlet-name>HelloServlet</servlet-name>
 6         <servlet-class>com.oracle.HelloServlet</servlet-class>
 7     </servlet>
 8     <servlet-mapping>
 9         <servlet-name>HelloServlet</servlet-name>
10         <url-pattern>/hello</url-pattern>
11     </servlet-mapping>
12     <welcome-file-list>
13         <welcome-file>index.jsp</welcome-file>
14     </welcome-file-list>
15 </web-app>

存放数据:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 -<person>
 4 
 5 
 6 -<person1>
 7 
 8 <name>张三</name>
 9 
10 <age>18</age>
11 
12 </person1>
13 
14 <!--这是注释标签 -->
15 
16 
17 
18 -<person2>
19 
20 <name>张三</name>
21 
22 <age>>18</age>
23 
24 -<![CDATA[
25             if(a>b&&a<b){
26                 a=b;
27             }
28         ]]>
29 </person2>
30 
31 </person>

元素命名:

    区分大小写

   不能使用空格,不能使用冒号:

    不建议以XML,  xml,  Xml开头

 格式化良好的XML文档,必须只有一个根元素

 

什么是DTD

 DTD (Document Type Definition ),文档类型定义,用来约束XML文档

规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!--
 3     模拟servlet2.3规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
 4     格式如下:
 5     <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
 6 -->
 7 <!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >
 8 <!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
 9 <!ELEMENT servlet-mapping (servlet-name,url-pattern+) >
10 <!ELEMENT servlet-name (#PCDATA)>
11 <!ELEMENT servlet-class (#PCDATA)>
12 <!ELEMENT url-pattern (#PCDATA)>
13 <!ELEMENT description (#PCDATA)>
14 <!ELEMENT jsp-file (#PCDATA)>
15 
16 <!ELEMENT welcome-file-list (welcome-file+)>
17 <!ELEMENT welcome-file (#PCDATA)>
18 
19 <!ATTLIST web-app version CDATA #IMPLIED>

 元素声明

定义元素语法:<!ELEMENT元素名 元素描述>

    元素名:自定义

    元素描述包括 : 符号和数据类型

          常见符号: ?  *  +  ()  |  ,

          常见类型:#PCDATA表示内容是文本,不能是子标签

符号

符号类型

 

描述

示例

 

?

问号

表示该对象可以出现,但只能出现一次

(菜鸟?)

 

*

星号

 

表示该对象允许出现任意多次,也可以是零次

(爱好*)

 

+

加号

 

表示该对象最少出现一次,可以出现多次

(成员+)

 

()

括号

 

用来给元素分组

(古龙|金庸|梁羽生),

(王朔|余杰),毛毛

 

 

|

竖条

 

表明在列出的对象中选择一个

 

(男人|女人)

 

,

逗号

表示对象必须按指定的顺序出现

(西瓜,苹果,香蕉)

 

 

实例:

 1 <!ELEMENT  web-app(servlet*,servlet-mapping*,welcome-file-list?)>
 2     web-app包括3个标签,且必须顺序出现。
 3         servlet子标签个数任意
 4         servlet-mapping子标签个数任意
 5         welcome-file-list子标签最多只能出现一次
 6 <!ELEMENT servlet(servlet-name,description?,(servlet-class|jsp-file))>
 7     servlet有3个子标签,且必须顺序出现
 8         servlet-name,必须有,且只能出现1次
 9         description,可选1次
10         servlet-class和jsp-file二选一,且只能出现一次
11 <!ELEMENT servlet-name(#PCDATA)>
12     servlet-name的标签体必须是文本
13 <!ELEMENT  welcome-file-list  (welcome-file+)>
14       welcome-file-list至少有1个子标签welcome-file

Schema约束

什么是Schema

  Schema是新的XML文档约束:

  Schema要比DTD强大很多,是DTD替代者;

  Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml .

  Schema功能更强大,数据类型更完善

  Schema支持名称空间

实例:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://www.example.org/web-app_2_5" 
 3             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4             xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
 5             version="2.5">
 6     <servlet>
 7         <servlet-name></servlet-name>
 8         <servlet-class></servlet-class>
 9     </servlet>
10     <servlet-mapping>
11         <servlet-name></servlet-name>
12         <url-pattern></url-pattern>
13     </servlet-mapping>
14     <welcome-file-list>
15         <welcome-file></welcome-file>
16         <welcome-file></welcome-file>
17     </welcome-file-list>
18 </web-app>

dom4j解析

 DOM解析原理及结构模型

API使用

 1 public class Demo01 {
 2     public static void main(String[] args) throws Exception {
 3         //1.获取解析器
 4         SAXReader saxReader=new SAXReader();
 5         //2.获得document文档对象
 6         Document doc=saxReader.read("src/com/oracle/demo03/web.xml");
 7         //3.获取根元素
 8         Element rootElement=doc.getRootElement();
 9         //获取元素名称
10         //System.out.println(rootElement.getName());
11         //获取元素中的指定属性的属性值
12         //System.out.println(rootElement.attributeValue("version"));
13         //4.获取根元素下的所有子元素
14         List<Element> childElements=rootElement.elements();
15         //5.遍历子元素
16         for(Element element:childElements){
17         //6.判断元素名称为servlet的元素
18             if("servlet".equals(element.getName())){
19         //7.获取servlet-name元素
20                 Element servletName=element.element("servlet-name");
21         //8.获取servlet-class元素
22                 Element servletClass=element.element("servlet-class");
23                 System.out.println(servletName.getText());
24                 System.out.println(servletClass.getText());
25             }
26         }
27     }
28 }

案例实现:

准备工作

1 package com.oracle.demo03;
2 
3 public interface MyServlet {
4     public void init();
5     public void service();
6     public void destory();
7 }
 1 public class MyServletImp implements MyServlet{
 2 
 3     public void init() {
 4         System.out.println("初始化");
 5         
 6     }
 7     public void service() {
 8         System.out.println("工作");
 9         
10     }
11     public void destory() {
12         System.out.println("死亡");
13         
14     }
15 
16 }
 1 public class Demo {
 2     public static void main(String[] args) throws Exception {
 3         //1.解析对象
 4         SAXReader saxReader=new SAXReader();
 5         //2.获取document对象
 6         Document doc=saxReader.read("src/com/oracle/demo03/web.xml");
 7         //3.获取根元素
 8         Element rootElement=doc.getRootElement();
 9         //4.获取根元素下的所有子元素
10         List<Element> childElements=rootElement.elements();
11         String className=null;
12         for(Element element:childElements){
13             if("servlet".equals(element.getName())){
14                 className=element.element("servlet-class").getText();    
15             }
16         }
17         //5.创建字节码对象
18         Class c=Class.forName(className);
19         MyServletImp myservlet=(MyServletImp)c.newInstance();
20         myservlet.init();
21         myservlet.service();
22         myservlet.destory();
23     }public class Demo {
24     public static void main(String[] args) throws Exception {
25         //1.解析对象
26         SAXReader saxReader=new SAXReader();
27         //2.获取document对象
28         Document doc=saxReader.read("src/com/oracle/demo03/web.xml");
29         //3.获取根元素
30         Element rootElement=doc.getRootElement();
31         //4.获取根元素下的所有子元素
32         List<Element> childElements=rootElement.elements();
33         String className=null;
34         for(Element element:childElements){
35             if("servlet".equals(element.getName())){
36                 className=element.element("servlet-class").getText();    
37             }
38         }
39         //5.创建字节码对象
40         Class c=Class.forName(className);
41         MyServletImp myservlet=(MyServletImp)c.newInstance();
42         myservlet.init();
43         myservlet.service();
44         myservlet.destory();
45     }
原文地址:https://www.cnblogs.com/2734156755z/p/9593173.html