XML作用
存储数据
格式:
<?xml version="1.0" encoding="UTF-8"?>
<web -app version="2.5">
</web-app version="2.5">
转义字符
< <
> >
" "
' '
& &
cdata区
<![CDATA[转移的内容]]>
DTD约束
定义元素语法:<!ELEMENT元素名 元素描述>
元素名:自定义
元素描述包括 : 符号和数据类型
常见符号: ? * + () | ,
常见类型:#PCDATA表示内容是文本,不能是子标签
? 0-1
* n
+ 1-n
() 分组
| 或
, 顺序出现
1.内部DTD,在XML文档内部嵌入DTD,只对当前XML有效。
2.外部DTD——本地DTD,DTD文档在本地系统上,公司内部自己项目使用。
3.外部DTD——公共DTD,DTD文档在网络上,一般都有框架提供。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 3 4 <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd"> 5 --> 6 <!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) > 7 <!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))> 8 <!ELEMENT servlet-mapping (servlet-name,url-pattern+) > 9 <!ELEMENT servlet-name (#PCDATA)> 10 <!ELEMENT servlet-class (#PCDATA)> 11 <!ELEMENT url-pattern (#PCDATA)> 12 <!ELEMENT description (#PCDATA)> 13 <!ELEMENT jsp-file (#PCDATA)> 14 15 <!ELEMENT welcome-file-list (welcome-file+)> 16 <!ELEMENT welcome-file (#PCDATA)> 17 18 <!ATTLIST web-app version CDATA #IMPLIED>
文件格式:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd"> <web-app version="2.3"> <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>
Schema约束
类似dtd约束
源码格式:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 3 模拟servlet2.5规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。 4 格式如下: 5 <web-app xmlns="http://www.example.org/web-app_2_5" 6 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 7 xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd" 8 version="2.5"> 9 --> 10 <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" 11 targetNamespace="http://www.example.org/web-app_2_5" 12 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 13 xmlns:tns="http://www.example.org/web-app_2_5" 14 elementFormDefault="qualified"> 15 16 <xsd:element name="web-app"> 17 <xsd:complexType> 18 <xsd:choice minOccurs="0" maxOccurs="unbounded"> 19 <xsd:element name="servlet"> 20 <xsd:complexType> 21 <xsd:sequence> 22 <xsd:element name="servlet-name"></xsd:element> 23 <xsd:element name="servlet-class"></xsd:element> 24 </xsd:sequence> 25 </xsd:complexType> 26 </xsd:element> 27 <xsd:element name="servlet-mapping"> 28 <xsd:complexType> 29 <xsd:sequence> 30 <xsd:element name="servlet-name"></xsd:element> 31 <xsd:element name="url-pattern" maxOccurs="unbounded"></xsd:element> 32 </xsd:sequence> 33 </xsd:complexType> 34 </xsd:element> 35 <xsd:element name="welcome-file-list"> 36 <xsd:complexType> 37 <xsd:sequence> 38 <xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element> 39 </xsd:sequence> 40 </xsd:complexType> 41 </xsd:element> 42 </xsd:choice> 43 <xsd:attribute name="version" type="double" use="optional"></xsd:attribute> 44 </xsd:complexType> 45 </xsd:element> 46 </xsd: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解析
//创建解析器对象
SAXReader sax=new SAXReader();
//加载xml文件获取dom对象
Document doc=sax.read("src/com/oracle/demo02/web.xml");
//获取根元素web-app
Element root=doc.getRootElement();
//获取servlet元素对象
Element servlet=root.element("servlet");
//获取servlet-class元素对象
Element servletclass=servlet.element("servlet-class");
//获取完整的包名+类名
String classname=servletclass.getText();
System.out.println(classname);
案例:
1 public class Demo01 { 2 public static void main(String[] args) throws DocumentException, ClassNotFoundException, InstantiationException, IllegalAccessException { 3 //创建解析器对象 4 SAXReader sax=new SAXReader(); 5 //加载xml文件获取dom对象 6 Document doc=sax.read("src/com/oracle/demo02/web.xml"); 7 //获取根元素web-app 8 Element root=doc.getRootElement(); 9 //获取servlet元素对象 10 Element servlet=root.element("servlet"); 11 //获取servlet-class元素对象 12 Element servletclass=servlet.element("servlet-class"); 13 //获取完整的包名+类名 14 String classname=servletclass.getText(); 15 System.out.println(classname); 16 //反射调用myservlet中所有的方法 17 //获取字节码文件对象 18 Class c=Class.forName(classname); 19 //新对象 20 MyServlet myservlet=(MyServlet)c.newInstance(); 21 myservlet.init(); 22 myservlet.service(); 23 myservlet.destroy(); 24 25 } 26 }
代码截图:
DTD (Document Type Definition ),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。