xml作用:配置文件,存放数据
不同的xml起到不同的作用:比如说web项目的中的配置文件起到配置路径作用,以及跳转请求的作用。hibernate的配置文件起到配置连接数据库和相关属性以及对实体类和关系型数据库进行映射的的作用,spring的配置文件起到配置javabean的实例化以及整合框架的作用。还有一些xml文件中存放了一些数据供程序读取。
xml语法: 文档声明,元素
DTD约束:一般很少自建xml格式,使用框架提供的约束文档,struct2
DTD的使用:引入 <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">,引入后使用指定格式(在elipse中会提示类型错误)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd"> <web-app version="1.0"> <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-list> </web-app>
Schema约束:新的xml文档约束,比dtd强大,功能更强大,spring框架使用该
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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>helloServlet</servlet-name> <servlet-class>xxxxxxxxxx</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
xml解析:3种方式1.document解析 2.sax解析 3.pull
常见解析器开发包:
使用dom4j解析器器解析:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package cn.itheima.xml.dom4j; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.junit.Test; public class TestDom4j { @Test public void testReadWebXML() { try { // 1.获取解析器 SAXReader saxReader = new SAXReader(); // 2.获得document文档对象 Document doc = saxReader.read("src/cn/itheima/xml/schema/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()); } } } catch (DocumentException e) { e.printStackTrace(); } } }