欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

XML 及 XML 的解析 - dom4j & Xpath

程序员文章站 2022-03-03 16:17:54
...

XML

XML简介

概述: xml可扩展性标记语言 <student></student> <s1></s1> <Student></Student>
xml与html区别
  1、xml语法要求严格、html语言要求比较松散
  2、xml严格大小写、html语言不区分大小写
  3、xml标签是自定义、html标签是预定义
  4、xml存储数据、html用来展示数据

XML书写规范

创建XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<school location="五方桥" area="1000">
	<myclass id="101班">
		<student>
			<sid>1</sid>
			<sname>张三</sname>
			<sage>23</sage>
			<semail>[email protected]</semail>
		</student>
		<student>
			<sid>2</sid>
			<sname>李四</sname>
			<sage>24</sage>
			<semail>[email protected]</semail>
		</student>
	</myclass>
	<myclass id="102班">
		<student>
			<sid>1</sid>
			<sname>刘丽</sname>
			<sage>26</sage>
			<semail>[email protected]</semail>
		</student>
		<student>
			<sid>2</sid>
			<sname>王小红</sname>
			<sage>23</sage>
			<semail>[email protected]</semail>
		</student>
	</myclass>
</school>

书写规范

<?xml version="1.0" encoding="UTF-8"?>文档声明

要求
  1、必须以<?开始以?>结束
  2、文档声明必须出现在0行0列位置
  3、必须有2个属性 version版本 encoding 编码方式
标签:
  1、良好的xml文件只有一个唯一的根标签
  2、标签必须是成对出现
  3、标签的命名
    1-1:不建议使用xml、XML、xML…名称
    1-2:不能以数字开头
    1-3:不能包括空格
  4、开始标签与结束标签之间称为元素体,元素体可以是文本也可以是标签
属性:
 1、属性必须出现在开始标签中
 2、属性可以出现0-多个
 3、在一个标签中属性名称不可以相同
 4、属性命名
   1-1:不建议使用xml、XML、xML…名称
   1-2:不能以数字开头
   1-3:不能包括空格

XML解析

常见的xml解析技术有2种 DOM解析 SAX解析
面试知识
 DOM解析:将整个文件加载到内存中、生成一个document文档对象,通过document文档对象我们就可以完成对于xml中标签节点的增删改查
   优点:由于是将整个文档加载的内存中、故保留原文档的节点关系、所以可以进行增删改查
   缺点:如果XML文档过大会造成内存溢出溢出
 SAX解析:采用事件驱动的方式、边扫描边解析、读一行解析一行。
   优点:可以解析大文档、速度非常快
   缺点:只能读、不能增删改

dom4j解析

使用步骤
1、导入jar包
XML 及 XML 的解析 - dom4j & Xpath

API
new SAXReader() 创建解析式
read() 加载文档
getRootElement() 获取根节点
Elements(标签名) 获取xml文件中指定名称所有子标签
Element(标签名) 获取xml文件中指定名称单个子标签
ElementText(标签名) 获取xml文件中子标签的文本值
getText() 获取当前标签的文本值
attributeValues(属性名) 获取当前标签的xx属性的属性值

package com.offcn.dom;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Dmo4j_Demo01 {
	public static void main(String[] args) throws DocumentException {
		//创建解析式
		SAXReader reader = new SAXReader();
		//加载文件
		Document document = reader.read("src/school.xml");
		//获取根节点
		Element school = document.getRootElement();
		System.out.println(school);
		//获取shool标签下所有的  班级子节点
		List<Element> myClass_list = school.elements("myclass");
		System.out.println(myClass_list.size());
		//如何拿到张三这个student标签
		Element zhangsanStu = myClass_list.get(0).element("student");
		System.out.println(zhangsanStu);
		//获取张三学生标签的子标签name的文本值
		String name = zhangsanStu.elementText("sname");
		System.out.println(name);
		//获取学生表下的子节点age
		Element sage = zhangsanStu.element("sage");
		//获取age文本值
		String text = sage.getText();
		System.out.println(text);
	}
}

Xpath解析

概述:在dom4j基础上进行优化、为了快速获取标签节点
使用步骤
1、导入jar包
XML 及 XML 的解析 - dom4j & Xpath

案例1: /的用法,表示从根目录进行一层一层选择
案例2: //选择文档中相匹配的节点,而不分层级
案例3: *表示任何元素节点,案例中查找student节点下的所有子节点
案例4: []中可以指定谓词表达式进一步选取元素
[count] 表示第几个元素,而不是下标
[last()] 表示最后一个元素
[position()❤️] 表示顺序号小于3的元素

API
  selectSingleNode(表达式) 获取单个符合表达式的元素
  selectNodes(表达式)获取多个符合表单式的元素