XML
xml是可扩展的标记语言,语法与HTML类似,但是HTML的标签元素是固定的,xml的标签元素是由用户自定义的
xml是HTML的补充,一般用于编写配置文件
引入本地xml的约束
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
命名空间:解决元素与属性的名称冲突问题,例如引用了多个schema文件,这些文件中定义多个同名称元素时就会出现名字冲突
<web-app xmlns="http://www.example.org/web-app_2_5" 引入命名空间
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 引入w3c的实例文档
xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd" 引入文档所在位置
version="2.5">
</web-app>
XML的解析方式
方式一:DOM 解析
将文档一次性加载到内存形成树结构,进行解析
优点:方便对树结构进行增删改操作
缺点:如果树结构过大会使得内存溢出
方式二:SAX 解析,事件驱动方式解析,边读边解析
优点:过大的文档不会造成内存的溢出
缺点:不能进行增删改操作且不能往回读
方式三:PULL方式解析,安卓内置解析方式,了解即可
三种方式解析XML:https://www.cnblogs.com/JerryWang1991/archive/2012/02/24/2365507.html
解析器:不同解析方式的具体实现
常见解析开发包:
JAXP:sun公司提供支持DOM和SAX解析
Jdom:dom4j的兄弟
jsoup:一种处理HTML特定解析开发包
dom4j:常用的解析开发包,hibernate底层采用
基本的解析方式包含两种,一种是事件驱动的(代表SAX),另一种方式是基于文档结构(代表DOM),其他的只不过语法不一样而已
dom4j解析XML
需要dom4j的jar
自定义一个xml文件
通过解析xml获取servlet的全类名
利用反射创建servlet对象,调用servlet方法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
<web-app version="1.0">
<servlet>
<servlet-name>Server-name</servlet-name>
<servlet-class>com.MyServer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Server-name</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
自定义一个普通类
public class MyServer {
public void server() {
System.out.println("MyServer 运行");
}
}
解析xml创建对象调用server方法
@Test
public void test1() {
try {
SAXReader reader = new SAXReader();
Document read = reader.read("src/index.xml");
Element rootElement = read.getRootElement();
Element element = rootElement.element("servlet");
Element element2 = element.element("servlet-class");
String text = element2.getText();
Class forName = Class.forName(text);
MyServer newInstance = (MyServer) forName.newInstance();
newInstance.server();
} catch (Exception e) {
e.printStackTrace();
}
}