详解xml-java语言

1.XML在线学习手册

XML 教程

2.XML可以做什么

  • 1.给两个程序之间进行数据通信。现在用的最多的是JSON。

  • 2.给服务器做配置文件

  • 3.存储复杂的数据关系。

  • 4.还可以充当小型的数据库。

3.书写格式

<?xml version="1.0" encoding="UTF-8" ?>
<students><student id="10021"><name>张三</name><age>22</age><gender>男</gender><className>软工一班</className></student>
</students>

解释以上xml的格式

1.xml:表示该文件的类型 xml,放在第一行

2.version=“1.0” 表示版本

3.encoding="UTF-8"文件编码

4.students:它表示的是root元素/根元素,是由程序员自己来写的

5.student:表示students的一个子元素,可以有很多个。

6.id就是属性 name age gender className 是students元素的子元素。

7.在xml中也可以有注释<!---->

4.xml语法格式

1.每个xml文档必须有且只有一个根元素

2.根元素是一个完全包括文档中其他所有元素的元素。

3.根元素的起始标记要放在所有其他元素的起始标记之前。

4.根元素的结束标记要放在所有其他元素的结束标记之后。

5.如果标签内没有内容,可以简写 <b></b> 可以简写为</b>

6.标签不允许交叉嵌套 <name>张三</name>,像这样就是不允许的。

7.区分大小写:比如:<email></email>和<Email></Email>这两个是不同的标签。

8.不能以数字开头,这个好理解,就不做解释了。

9.名称之间不能使用冒号":".

10.如果标签单词需要间隔,建议使用下划线,比如<book_name></book_name>

11.属性值 使用双引号(“”)或者是单引号('')分隔(如果属性值中有单引号(‘’),则用双引号("")分隔,有双引号(''),则用单引号分隔(‘’))

12.一个元素可以有多个属性,它的基本格式为:<元素名 属性名 = ""属性值">

13.特定的属性名称在同一个元素标记中只能出现一次。

14.属性值不能包括&字符。

5.什么是CDATA节

有些内容不想让解析引擎执行,而是当做原始内容,可以使用CDATA包括起来,CDATA节中的所有字符都会被当做简单文本,而不是XML标记。

语法:

<!CDATA[
这里就是可以把你输入的字符原样显示,不会解析xml
]]>

可以把你输入的字符原样输出,除了]]>。

也是不能嵌套的。

简单点来说:如果你希望吧某些字符串,当做普通文本,使用CDATA包括。

6.转义字符

表示一些特殊的字符。

转义符符号
$lt;<
$gt;>
$amp;&
$quot;""
$apos;''

7.DOM4j

不管是HTML文件还是xml文件,他们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。

document对象表示的是整个文档。

第三方 XML解析技术

1.jdom在dom基础上进行了封装。

2.dom4j又对jdom进行了封装。

什么是DOM4j?

Dom4j是一个简单的灵活的开放源代码的库(主要是用于解析/处理XML文件)。Dom4j是由早期开发JDOM的人分离开发出来的。

与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但是它提供了比JDOM更好的灵活性。

Dom4j是一个优秀的Java XML API , 具有性能优异、功能强大和容易使用的特点。

使用Dom4j需要下载Dom4j相应的jar包。dom4j

获取Document对象的方式有三种

1.读取XML文件,获取document对象。

 SAXReader reader = new SAXReader();//创建一个解析器
Document document = reader.read(new File("src/...xml"));//XML Document
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;import java.io.File;public class Dom4j_test {public static void main(String[] args) throws DocumentException {//加载XML文件//得到一个解析器SAXReader reader = new SAXReader();Document document = reader.read(new File("src/students.xml"));System.out.println(document);//org.dom4j.tree.DefaultDocument@2a0b20 [Document: name file:///C:/study/java/study_code/xml/src/students.xml]}
}

2.解析XML形式的文本,得到Document对象。

String text = "<members></members>";
Document documnet = DocumentHelper.parseText(text);

3.主动创建Document对象。

Document document = DocumentHelper.createDocument();//创建根节点
Element root = document.addElement("members");

遍历xml中的元素

<?xml version="1.0" encoding="UTF-8" ?>
<students><student id="10021"><name>张三</name><age>22</age><gender>男</gender><className>软工一班</className></student><student id="10022"><name>李四</name><age>21</age><gender>女</gender><className>软工二班</className></student>
</students>
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.List;public class Dom4j_test {public static void main(String[] args) throws DocumentException {//加载XML文件//得到一个解析器SAXReader reader = new SAXReader();Document document = reader.read(new File("src/students.xml"));//遍历xml//1.得到rootElementElement rootElement = document.getRootElement();List<Element> students = rootElement.elements();for (Element student : students) {//student元素的name ...Element name = student.element("name");Element age = student.element("age");Element gender = student.element("gender");Element className = student.element("className");System.out.println("学生信息:" + name.getText() + ",年龄:" + age.getText() +",性别:" + gender.getText() + ",班级:" + className.getText());}}
}
//学生信息:张三,年龄:22,性别:男,班级:软工一班
//学生信息:李四,年龄:21,性别:女,班级:软工二班

指定得到某一个学生

//获取第一个学生
Element student = (Element) rootElement.elements("student").get(0);
System.out.println("该学生的信息:"+student.element("name").getText()+student.element("age").getText()+"性别:" + student.element("gender").getText() + ",班级:" + student.element("className").getText());

获取元素的属性

//获取student的属性
System.out.println("id=" + student.attributeValue("id"));

完整代码:

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.List;public class Dom4j_test {public static void main(String[] args) throws DocumentException {//加载XML文件//得到一个解析器SAXReader reader = new SAXReader();Document document = reader.read(new File("src/students.xml"));//遍历xml//1.得到rootElementElement rootElement = document.getRootElement();List<Element> students = rootElement.elements();for (Element student : students) {//student元素的name ...Element name = student.element("name");Element age = student.element("age");Element gender = student.element("gender");Element className = student.element("className");System.out.println("学生信息:" + name.getText() + ",年龄:" + age.getText() +",性别:" + gender.getText() + ",班级:" + className.getText());}//获取第一个学生Element student = (Element) rootElement.elements("student").get(0);System.out.println("该学生的信息:" + student.element("name").getText() + student.element("age").getText() + "性别:" + student.element("gender").getText() + ",班级:" + student.element("className").getText());//获取student的属性System.out.println("id=" + student.attributeValue("id"));}
}

增加,删除,修改

添加一个学生:

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;import java.io.*;public class Dom4j_demo {public static void main(String[] args) throws DocumentException, IOException {//1.得到解析器SAXReader reader = new SAXReader();//2.指定解析哪个xml文件Document document = reader.read("src/students.xml");//首先先要创建一个学生节点对象Element student = DocumentHelper.createElement("student");//给元素添加属性student.addAttribute("id", "10023");Element student_name = DocumentHelper.createElement("name");student_name.setText("王五");Element student_age = DocumentHelper.createElement("age");student_age.setText("23");Element student_gender = DocumentHelper.createElement("gender");student_gender.setText("男");Element student_className = DocumentHelper.createElement("className");student_className.setText("软工三班");//把子元素添加到student下student.add(student_name);student.add(student_age);student.add(student_gender);student.add(student_className);//在把student节点添加到根元素document.getRootElement().add(student);//直接输出会出现中文乱码OutputFormat outputFormat = OutputFormat.createPrettyPrint();outputFormat.setEncoding("utf-8");//输出的编码为utf-8//把xml进行更新XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/students.xml")), outputFormat);writer.write(document);System.out.println("添加成功!!!!");writer.close();}
}

删除一个子节点(学生)

 

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;import java.io.File;
import java.io.FileOutputStream;public class Dom4j_demo2 {public static void main(String[] args) throws Exception {//1.得到解析器SAXReader reader = new SAXReader();//2.指定解析的xml文件Document document = reader.read(new File("src/students.xml"));//3.找到该元素的第一个学生Element student = (Element) document.getRootElement().elements("student").get(0);//删除元素student.getParent().remove(student);//直接输出会出现中文乱码OutputFormat outputFormat = OutputFormat.createPrettyPrint();outputFormat.setEncoding("utf-8");//输出的编码为utf-8//把xml进行更新XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/students.xml")), outputFormat);writer.write(document);System.out.println("删除成功!!!!");writer.close();}
}

 

修改一个子节点(学生)

把所有的学生加一


import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
public class Dom4j_demo3 {public static void main(String[] args) throws Exception {//1.得到解析器SAXReader reader = new SAXReader();//2.指定解析的xml文件Document document = reader.read(new File("src/students.xml"));//得到所有学生的年龄List<Element> students = document.getRootElement().elements("student");for (Element student : students) {Element age = student.element("age");age.setText((Integer.parseInt(age.getText()) + 1) + "");}//直接输出会出现中文乱码OutputFormat outputFormat = OutputFormat.createPrettyPrint();outputFormat.setEncoding("utf-8");//输出的编码为utf-8//把xml进行更新XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/students.xml")), outputFormat);writer.write(document);System.out.println("更新成功!!!!");writer.close();}
}

 8.小结

感谢您花时间浏览本篇文章,本文章是笔者的学习笔记,如果您在学习当中发现了问题,还请您在评论区留言,笔者看到后会在第一时间处理,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/670616.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ansible 自动化运维工具 - 了解和模块应用

目录 一. Ansible 的相关知识 1.1 Ansible 工具的简介 1.2 Ansible的四大组件 1.3 运维自动化工具 1.4 Ansible 和其它自动化运维工具对比 1.5 Ansible 的优缺点 二. Ansible 环境安装部署 2.1 管理端安装 ansible 2.2 配置主机清单 三. ansible 命令行模块 3.1 comm…

JavaScript中Math函数与舍入

立方根 console.log(Math.sqrt(25)); //数学方式25平方根 console.log(25 ** (1 / 2)); //25的0.5次方 console.log(8 ** (1 / 3)); //8的1/3次方计算最大最小值 console.log(Math.max(1, 5, 88, 22, 132)); //返回最大值 console.log(Math.max(1, 5, 88, 22, 132)); //…

[Flutter]创建一个私有包并使用

在Flutter中创建一个自己的私有组件&#xff08;通常称为包或库&#xff09;&#xff0c;并通过Dart的包管理工具pub进行使用。 一、创建一个新的Flutter包 1.使用命令行创建 使用Flutter命令行工具来创建一个新的包&#xff1a; $ flutter create --templatepackage my_pri…

为什么很多人不推荐你用JWT?

为什么很多人不推荐你用JWT? 如果你经常看一些网上的带你做项目的教程&#xff0c;你就会发现 有很多的项目都用到了JWT。那么他到底安全吗&#xff1f;为什么那么多人不推荐你去使用。这个文章将会从全方面的带你了解JWT 以及他的优缺点。 什么是JWT? 这个是他的官网JSON…

React + 项目(从基础到实战) -- 第11期

目标 问卷编辑器的开发 设计UI - 拆分布局 水平垂直居中 画布 y方向滚动 自定义问卷组件 后端 返回组件数据 //获取单个问卷信息{url: /api/question/:id,method: get,response: () > {return {errno: 0,data: {id: Random.id(),title: Random.ctitle(),componentList:[//…

测试用例执行的结果pass_fail_block_skip

pass fail block skip 测试用例的执行结果通常包括以下几个方面&#xff1a; 1. **测试结果状态**&#xff1a;通常分为“通过”、“失败”、“阻塞”和“跳过”等状态。 - **通过**&#xff1a;测试用例执行完毕&#xff0c;预期结果与实际结果一致。 - **失败**&am…

【AI】深度学习框架的期望与现实 机器学习编译尚未兑现其早期的一些承诺……

深度学习框架的期望与现实 机器学习编译尚未兑现其早期的一些承诺…… 来自&#xff1a;Axelera AI 资深软件工程师 Matthew Barrett 原帖是linkedin帖子&#xff1a; https://linkedin.com/posts/matthew-barrett-a49929177_i-think-its-fair-to-say-that-ml-compilation-ac…

Flask应用的部署和使用,以照片分割为例。

任务是本地上传一张照片&#xff0c;在服务器端处理后&#xff0c;下载到本地。 服务器端已经封装好了相关的程序通过以下语句调用 from amg_test import main from test import test main() test() 首先要在虚拟环境中安装flask pip install Flask 文件组织架构 your_pro…

Redis-单机安装

试图从官网注册不了我也不知道什么情况。 网盘自取吧&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1KERBQaH9gCT10AGt9z0_jg?pwdyjen 安装比较简单&#xff0c;照着敲就完了每一步都试过了&#xff0c;先单机安装&#xff0c;后面搭建集群。 1.将安装包放到/usr/…

Nest 快速上手 —— (三)中间件 / 异常过滤器

一、 中间件&#xff08;Middleware&#xff09; 1.特点 中间件是一个在路由处理程序之前被调用的函数。中间件函数可以访问请求和响应对象&#xff0c;以及应用程序请求-响应周期中的next()中间件函数。下一个中间件函数通常由一个名为next的变量表示。 中间件函数可以执行以…

Xshell 7启动报错 产品运行所需的信息检索失败

错误信息 产品运行所需的信息检索失败 请重新安装Xshell Code:40002 解决办法 1、把压缩包解压出来 2、在“!)绿化处理.bat”上面右键以管理员身份运行

高项-案例分析万能答案(作业分享)

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 一、通用问题原因: 1.项目经理管理经验不足&#xff0c;没有及时发现和解决xx方面的问题。 2.项目管理计划没有得到关键干系人的评审确…