1.使用XML作为配置文件的方式完成模拟Tomcat
1.1.XML的语法
XMl的文档说明
*文档申明:通常出现在XML的第一行第一列。
*<?xml 属性名=“属性值” 。。。>
*Version :使用1.0
*encoding : 字符集,是使用浏览器打开时采用的默认的字符集的编码
*standalone: 描述XML文档是否需要依赖其他的文件。
XMl的注释
XML的元素
*元素(标签)
*名称中不能不含冒号(:)
*名称不能以字符“XMl”结尾。
*名称不能以数字或者标点符号开始
*名称不能包含空格
* 元素:xml文档中的标签
** 文档中必须有且只能有一个根元素
* 元素需要正确闭合。
* 元素需要正确嵌套
* 元素名称要遵守:
* 元素名称区分大小写
* 数字不能开头
XML的属性
*属性的名称规范与元素一致。
* 属性值必须用引号引起来。单双引号都行
**属性需要使用引号
XML 的特殊字符和CDATA区
*XMl的特殊字符
< < 小于
> >
& &
' ’ 单引号
&quto;” 引号
*XML的CDATA区:(CDATA:character Data)
* 文本:
* 转义字符:>
* CDATA: 里边的数据会原样显示
*
<![CDATA[
//todo....
]]>
xml约束:
* 约束就是xml的书写规则
* 约束的分类:
dtd:
dtd分类:
* 内部dtd:在xml内部定义dtd
* 外部dtd:在外部文件中定义dtd
* 本地dtd文件:
* 网络dtd文件:
schema:
导入xsd约束文档:
1、编写根标签
2、引入实例名称空间 xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
3、引入名称空间 xsi:schemaLocation=”http://www.itcast.cn/xml student.xsd”
4、引入默认的名称空间
2.XMl的解析
XML 的解析的方式:
****DOM解析(Document object model):
****SAX解析(simple API for XML):
*DOM和SAX的区别:
DOM:一次性将文档加载到内存,形成树形结构进行解析。
缺点:如果文档特别大,容易导致内存的溢出。
优点:对XML进行增删改查的操作。
SAX:事件驱动的方式,一行一行进行解析。
缺点:不能对文档进行增删改,只能查。
优点:如果文档也别大,不会导致内存的溢出。
针对两种解析的方式,不同的公司提供了不同的API的实现
*JAXP:SUN公司提供的一套XML解析的API。
*JDOM:
*DOM4J:API-DOM4J
*PULL: 主要应用在安卓客户端。
DOM4J解析
public class DOM4JDemo01 {
@Test
public void test01() throws Exception{
// 创建解析器
SAXReader saxReader = new SAXReader();
// 解析XML文档
Document document = saxReader.read("src/XML/demo01.xml");
// 获得根节点
Element root = document.getRootElement();
// 查找根节点下的子节点
System.out.println(root.getName());
// 查找第一个Person元素
Element pElement = root.element("person");
Element nElement = pElement.element("name");
Element aElement =pElement.element("age");
Element gElement =pElement.element("gender");
System.out.println(nElement.getText()+"\t"+aElement.getText()+"\t"+gElement.getText());
}
}
3.XPath
*dom4J支持XPath的jar包
*jaxen-1.1-beta-6.jar
*dom4J的XPath支持的API:
*List document.selectNodes(String xPath)
*Node document.selectSingleNode(String xPath)
@Test
/*
* Dom4J的xPath
* */
public void test02() throws Exception{
// 创建解析器
SAXReader saxReader = new SAXReader();
// 解析XML返回Document对象
Document document = saxReader.read("src/XML/demo01.xml");
//
List<Node> list = document.selectNodes("//name");
for (Node node : list) {
System.out.println(node.getText());
}
List<Node> list1 = document.selectNodes("//person['@id']");
for (Node node : list1) {
Element element = (Element) node;
System.out.println(element.attributeValue("id"));
}
}