作者:李-诗-妍_519 | 来源:互联网 | 2023-12-13 17:39
本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。
学习网站:https://www.w3school.com.cn/x.asp
XML概述:全称为(EXtensible Markup Language) 是一种可扩展的语言
标记语言:通过标签来描述数据的一门语言(标签我们有时候也称之为元素)
可扩展:标签的名字是可以自定义的
可以理解为XML是由很多标签组成的,而标签名是可以自定义的
作用:
用来进行存储数据和传输数据
作为软件的配置文件
标签的规则:
标签必须有一对尖括号和合法标识符组成
例如:
标签必须成对出现
第一个是开始标签 第二个是结束标签
特殊的标签是可以不成对,但是必须有结束标记
标签中可以定义属性,标签和标签名空格隔开,属性值必须用引号引起来
student就是标签名 id就是属性名 中间用空格 1用引号引起来 单双引号都可以 但必须成对,不能一单一双
标签必须正确的嵌套
正确示例:张三
错误示例:张三
XML语法规则:
1.XML的文件后缀名为:xml
2.文档声明必须是第一行第一列
version:该属性是必须存在的
encoding:该属性不是必须的,表示打开当前xml文件应该使用什么字符编码表(一般取值是UTF-8)
standalone:该属性不是必须的,描述XML文件是否依赖其他的XML文件,取值为yes/no
3.必须存在一个根标签,有且只有一个
4.xml文件中可以定义注释信息
5.xml文件可以存在特殊字符
< < 小于
> > 大于
& & 和号
' &#39; 单引号
" " 引号
6.XML文件中可以存在CDATA区
示例&#xff1a;
再SRC目录下创建同级目录student.xml文件
张三22学生的<张三>>>>并不会影响报错]}]]>李四18
XML解析
常见的解析思想
DDM(Document()Object Model)文档对象模型
就是把文档的各个组成部分看做想对应的对象
会把XML文件全部加载到内存中
再内存中形成一个树形结构,再获取相应的值
就像剥玉米一样&#xff0c;先获取到整体&#xff0c;在一层一层的进入
Document对象:整个xml文档
Element对象&#xff1a;所有标签
Attribute&#xff1a;所有属性
Text对象&#xff1a;所有文本内容
都有一个父类Node对象
XML的解析工具
JAXP&#xff1a;SUN公司提供的一套XML的解析API
JDOM&#xff1a;开源组织提供了一套XML的解析的API—jdom
DOM4J(全称&#xff1a;Dom For Java): 开源组织提供了一套XML的解析的API-dom4j
pull&#xff1a;主要引用再Android手机端解析xml
主要学习DOM4J 可以通过https://dom4j.github.io/去下载dom4j
下载压缩包解压
再SRC目录下创建同级目录libs 并把文件夹中的dom4j-1.6.1.jar 粘贴到libs 并右键单击jar包 点击Add as Library 表示要导入到当前项目中
需求&#xff1a;解析这个xml文件&#xff0c;将解析到的数据封装到学生对象中&#xff0c;并将学生对象存储到ArrayList集合中&#xff0c;遍历集合
xml文件内容&#xff1a;
需要加一个学生类
public class Student {private String id;private String name;private int age;public Student(String id, String name, int age) {this.id &#61; id;this.name &#61; name;this.age &#61; age;}&#64;Overridepublic String toString() {return "Student{" &#43;"id&#61;&#39;" &#43; id &#43; &#39;\&#39;&#39; &#43;", name&#61;" &#43; name &#43;", age&#61;" &#43; age &#43;&#39;}&#39;;}}
测试类&#xff1a;
/*** 利用dom4j解析XML文件*/public class test {public static void main(String[] args) throws DocumentException {//获取解析器对象SAXReader saxReader&#61;new SAXReader();//利用解析器把xml文件加载到内存中&#xff0c;并返回一个文档对象Document document &#61; saxReader.read(new File("D:\\workspace\\xmle\\xml\\studnet.xml"));//获取到根标签Element rootElement &#61; document.getRootElement();//通过根标签获取student标签//elements()获得所有的子标签 会把这些子标签放到一个集合List elements &#61; rootElement.elements();System.out.println(elements.size());//element("标签名") 可以获取调用者所有的指定的子标签&#xff0c;会把这些子标签放到一个集合中并返回List studnet &#61; rootElement.elements("students");//用来装学生对象ArrayList list&#61;new ArrayList<>();//遍历集合得到每一个标签for (Element element : studnet) {//element标识每一个student标签//获取到id的属性值Attribute attribute &#61; element.attribute("id");String id &#61; attribute.getValue();//获取name标签//element("name") 获取调用者指定的子标签Element name &#61; element.element("name");//获取这个标签的标签体String text &#61; name.getText();//获取age标签Element age &#61; element.element("age");//获取age的标签体String text1 &#61; age.getText();Student s&#61;new Student(id,text,Integer.parseInt(text1));list.add(s);}//遍历操作for (Student student : list) {System.out.println(student);}}}