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(表达式)获取多个符合表单式的元素