详解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.得到rootElement
        Element 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.得到rootElement
        Element 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.小结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一键安装Halo DB

说明 这里说的一键其实分了好几步&#xff0c;是我将安装步骤分解。你可以把它们放在一个shell中或者串起来就是一键了。 易景科技的数据库 羲和 &#xff08;Halo DB&#xff09; 我之前的一位朋友&#xff08;章晨曦&#xff09;创立的数据库公司。以前看他朋友圈说他做数…

【智能算法】PID搜索算法(PSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年&#xff0c;Y Gao受到PID控制理论启发&#xff0c;提出了PID搜索算法&#xff08;PID-based Search Algorithm, PSA&#xff09;。 2.算法原理 2.1算法思想 PID算法是控制领域的…

【C++语言】类和对象--默认成员函数 (中)

文章目录 前言类的六个默认成员函数&#xff1a;1. 构造函数概念特性做了什么&#xff1f;易错注意&#xff1a;显式定义和默认构造函数 2. 析构函数概念特征做了什么?注意事项&#xff1a; 3.拷贝构造函数概念特征做了什么&#xff1f;注意事项&#xff1a; 4.赋值运算符重载…

免费分享一套微信小程序商城系统(电商系统)(SpringBoot+Vue3)【至尊版】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;自己原创写了一个不错的微信小程序商城系统(电商系统)(SpringBootVue3)【至尊版】&#xff0c;免费分享下哈。 项目视频演示 【免费】微信小程序商城系统(电商系统)(SpringBootVue3) 【至尊版】Java毕业设计_哔哩哔哩_bi…

基于Spring Boot的民宿管理平台设计与实现

基于Spring Boot的民宿管理平台设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台首页功能界面图&#xff0c;在系统首页可以查看首页…

设计模式之传输对象模式

在编程江湖里&#xff0c;有一种模式&#xff0c;它如同数据的“特快专递”&#xff0c;穿梭于系统间&#xff0c;保证信息的快速准确送达&#xff0c;它就是——传输对象模式&#xff08;Data Transfer Object, DTO&#xff09;。这不仅仅是数据的搬运工&#xff0c;更是提升系…

与Apollo共创生态:让智驾技术为各行业发展赋能

目录 一、引言 二、Apollo七周年大会主要内容回顾 2.1活动回顾链接 2.2Apollo项目介绍 2.2.1Apollo项目发展介绍 2.2.2实验用车传感器介绍 2.2.3硬件连接概述 2.2.4软件概述 2.3Apollo X 企业自动驾驶解决方案介绍 2.3.1Apollo X 企业自动驾驶解决方案优势 2.3.2 Ap…

(二)JSP教程——taglib指令

创建标签文件 首先创建一个Web项目&#xff0c;在webapp/WEB-INF目录下创建一个tags文件夹 在tags文件夹中创建一个oddNumberSum.tag文件&#xff0c;Tag文件时扩展名为.tag的文本文件&#xff0c;其结构和JSP文件非常相似&#xff0c;该文件的目录结构如图所示 创建Tag文件的…

有免费的通配符SSL证书吗?通配符证书的申请

首先要了解通配符SSL证书&#xff0c;需要先知晓我们常用的普通单域名SSL证书、多域名SSL证书与之的区别。 单域名SSL证书最容易理解&#xff0c;一张证书有且只能绑定与保护一个域名&#xff0c;例如www.123456.com 证书安装部署完成后则会激活对于该域名的https、即加密访问…

泛微E9开发 限制整型、日期型、附件型字段的取值范围

1、功能背景 在用户进行输入时&#xff0c;通过控制输入数据的范围来实现实际效果&#xff0c;如上级管理者对下级员工进行年度评分时&#xff0c;只能输入1~100分&#xff0c;现在表单中新增三种类型不同的字段&#xff0c;具体如下所示&#xff1a; 2、展示效果 限制整数的…

订单超时自动取消的实践方案

1、定时任务方案 方案流程&#xff1a; 每隔 30 秒查询数据库&#xff0c;取出最近的 N 条未支付的订单。 遍历查询出来的订单列表&#xff0c;判断当前时间减去订单的创建时间是否超过了支付超时时间&#xff0c;如果超时则对该订单执行取消操作。 定时任务方案工程实现相…

✌粤嵌—2024/5/6—盛最多水的容器

代码实现&#xff1a; 方法一&#xff1a;暴力解法 #define min(a, b) ((a) > (b) ? (b) : (a)) #define max(a, b) ((a) > (b) ? (a) : (b))int maxArea(int *height, int heightSize) {int ans 0;for (int i 0; i < heightSize; i) {for (int j i; j < heig…

pytest教程-37-钩子函数-pytest_collection_finish

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_collection_start钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_collection_finish钩子函数的使用方法。 pytest_collection_finish(session) 是一个 pytest 钩子函数&…

【深度学习】序列模型

深度学习&#xff08;Deep Learning&#xff09;是机器学习的一个分支领域&#xff1a;它是从数据中学习表示的一种新方法&#xff0c;强调从连续的层中进行学习&#xff0c;这些层对应于越来越有意义的表示。 1. 为什么选择序列模型&#xff1f; 循环神经网络&#xff08;RNN…

与 Apollo 共创生态:Apollo 7 周年大会的启示与心得

文章目录 前言Apollo X 全新征程Application X 企业预制套件总结 前言 在过去的七年中&#xff0c;Apollo 开放平台经历了一段令人瞩目的发展历程。从最初的构想到如今的成熟阶段&#xff0c;Apollo 已经推出了 13 个版本&#xff0c;吸引了来自全球 170 多个国家和地区的 16 …

曼奇立德10节春季插画研修课

课程介绍 课程探讨了存在主义心理学的基本原理和方法。通过学习该课程&#xff0c;您将了解到存在主义的核心概念&#xff0c;如自由意志、责任感和意义寻求。您将学会运用存在主义理论和技巧来帮助个人面对挑战、追求自我实现&#xff0c;并寻找生活的意义。这门课程将启发您的…

JS基础:JS语法规范详解(最全!)

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取完整web基础…

Netty核心线程模型源码分析

文章目录 一、Netty线程模型简介二、Netty线程模型源码分析1. 服务端源码分析 一、Netty线程模型简介 Netty的线程模型图如下所示&#xff1a; 具体细节看这篇博客 二、Netty线程模型源码分析 1. 服务端源码分析 首先我们在写Netty服务端程序的时候最开始是下面两句代码&a…

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

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

1W 3KVDC 隔离双输出 DC/DC 电源模块 ——TPD 系列

TPD系列提供双独立输出电压&#xff0c;并且两组电压可以不同&#xff0c;这样就节省一个电源模块&#xff0c;特别适合一块板上有多个不同电压要求的设计&#xff0c;而外形尺寸和TPA一样&#xff0c;工作温度范围广-40℃到 105℃。