XML 及 XML 的解析 - dom4j & Xpath

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>zhangsan@163.com</semail>
		</student>
		<student>
			<sid>2</sid>
			<sname>李四</sname>
			<sage>24</sage>
			<semail>lisi@163.com</semail>
		</student>
	</myclass>
	<myclass id="102班">
		<student>
			<sid>1</sid>
			<sname>刘丽</sname>
			<sage>26</sage>
			<semail>liuli@163.com</semail>
		</student>
		<student>
			<sid>2</sid>
			<sname>王小红</sname>
			<sage>23</sage>
			<semail>xiaohong@163.com</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包
在这里插入图片描述

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包
在这里插入图片描述

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值