🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 语法 xml语法和html大致一样,xml语法要求严格 1. 第一行xml文件的声明(版本号,编码格式),默认会加上,不能修改 2. xml只能有一个根标签,根标签可以有多个子标签 3. xml中的标签命名需要符合变量的命名规范 4. xml严格区分大小写 5. 标签可以有属性,属性需要自定义,写在开始标签中,必须有值,值要引起来 6. xml都是双标签,需要正确结束 7. 页面中的特殊符号需要使用转义字符(html的实体字符) # 解析 java平台同时提供了DOM和SAX ![](https://box.kancloud.cn/61f955519ef088fe0bc3c339f1a1cc10_930x530.png) ## DOM解析原理及结构模型 xml dom 和 html dom 类似,xml dom将整个xml文档加载到内存,生成一个dom树,并获得Document对象,通过Document对象就可以对Dom进行操作 ![](https://box.kancloud.cn/773380c08a5e835d7aee4fd52a7c4d3b_904x552.png) dom的核心概念就是节点,在xml文档中的元素,属性,文本,在dom中都是节点 # dom4j dom4j必须使用核心类SaxReader加载xml文档获得Document,通过Document对象获得文档的根元素,然后就可以操作了 ## 常用API ![](https://box.kancloud.cn/f03c06efeb871b9bc0d29b689be05ee8_852x464.png) ## 用法 我们用web.xml来示范下 ~~~ try { //1.创建解析器对象 SAXReader saxReader = new SAXReader(); //2.使用解析器加载web.xml文件得到document对象 Document document = saxReader.read("test.xml"); //3.获取根元素节点 Element rootElement = document.getRootElement(); //4.获取子节点(servlet和servlet-mapping) List<Element> childElements = rootElement.elements(); //5.遍历 for (Element element : childElements) { //6.判断元素的名称为servlet的元素节点 if("servlet".equals(element.getName())){ //7.分别获取servlet元素节点的servlet-name和servlet-class的值 String servletName = element.element("servlet-name").getText(); String servletClass = element.element("servlet-class").getText(); System.out.println(servletName); System.out.println(servletClass); } System.out.println("--------"); //9.判断元素的名称为servlet-mapping的元素节点 if("servlet-mapping".equals(element.getName())){ //10.分别获取servlet元素节点的servlet-name和servlet-class的值 String servletName = element.element("servlet-name").getText(); String urlPattern = element.element("url-pattern").getText(); System.out.println(servletName); System.out.println(urlPattern); } } } catch (DocumentException e) { e.printStackTrace(); } ~~~