详解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.mzph.cn/web/7214.shtml

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

相关文章

使用Gitbook生成电子书

背景 《Google工程实践文档》相对原文Google’s Engineering Practices documentation &#xff0c;部分内容过时了。需要更新中文版&#xff0c;并使用Gitbook把Markdown文件转换成对应的PDF电子书。   上一次生成PDF电子书是5年前&#xff0c;当时生成电子书的环境早已不在…

虚拟键代码

虚拟键代码 虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn 在Windows操作系统中&#xff0c;虚拟键代码&#xff08;Virtual-Key Codes&#xff09;是一组用来表示键盘上按键的数值。这些代码通常用于Windows API函数&#xff0c;以便程序能够识别和处理键盘输入。 虚拟…

Linux第三节--常见的指令介绍集合(持续更新中)

点赞关注不迷路&#xff01;&#xff0c;本节涉及初识Linux第三节&#xff0c;主要为常见的几条指令介绍。 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1f44d;&#x1f3fb; 收藏 ✨ 加关注&#x1f440; 期待与你共同进步! Linux下基本指令 1. man指令 Linu…

百科词条创建机构有哪些?

在互联网时代&#xff0c;百度百科作为我国最大的中文百科全书&#xff0c;已经成为人们获取知识、查询信息的重要途径。随着百度百科影响力的不断扩大&#xff0c;越来越多的人和企业试图通过创建企业词条来提升自身知名度&#xff0c;企业和个人为了在百度百科上占据一席之地…

GoLand安装教程

GoLand-安装 GoLand是Go语言编程开发的一款工具&#xff0c;和 IntelliJ IDEA 一样&#xff0c;同为Jetbrains公司旗下的产品&#xff0c;专为Go语言开发的跨平台商业集成开发环境&#xff08;IDE&#xff09;&#xff0c;它的功能非常强大&#xff0c;它还不仅仅是一个Go IDE…

记一次动态规划的采坑之旅, 741摘樱桃 https://leetcode.cn/problems/cherry-pickup/description/

首次看题目时&#xff0c;发现是困难。立马想到了&#xff0c;动态规划。 再看题目&#xff0c; 摘樱桃&#xff0c;还要返回摘两次&#xff0c;求摘最多的樱桃。 大脑第一反应就是&#xff1a; 先使用动态规划&#xff0c;找到 0 0 到 n-1 n-1处走过的最大樱桃&#xff0c; 并…

重写muduo之EPollPoller

1、EPollPoller.h EPollPoller的主要实现&#xff1a;作为poller的派生类&#xff0c;把基类给派生类保留的这些纯虚函数的接口实现出来。 override表示在派生类里面&#xff0c;这些方法是覆盖方法。必须由编译器来保证在基类里面一定有这些函数的接口的声明。在派生类要重写…

从OutputStream类看Java中的IO流操作

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

C#连接S7-200 smart通讯测试

honeytree 一、编程环境 VS2022软件&#xff0c;选择windows窗体应用&#xff08;.NET FrameWork&#xff09;&#xff1a;​博途TIA/WINCC社区VX群 ​博途TIA/WINCC社区VX群 添加NuGet程序包&#xff1b;S7netplus 二、引用http://S7.net 三、建立PLC链接 S7-200smart和…

使用Docker安装Jenkins

大家好&#xff0c;今天给大家分享如何使用docker安装jenkins&#xff0c;关于docker的安装和常用命令可以参考下面两篇文章&#xff0c;使用docker可以提高资源利用率&#xff0c;能够在不同的环境中轻松迁移和部署应用&#xff0c;在本文中就不过多赘述了。 Docker常用命令 …

工厂模式+策略模式完成多种登录模式的实现

前提 &#xff08;简单工厂不属于设计模式&#xff0c;而是一种编程思想【抽象一层出来】&#xff09;工厂方法模式、抽象工厂模式 以上都是为了解耦&#xff0c;如果考虑多个纬度&#xff08;如需要同时考虑多种电器&#xff0c;多种品牌&#xff09;则优先考虑抽象工厂。 …

怎么通过Java语言实现远程控制无人售货柜

怎么通过Java语言实现远程控制无人售货柜呢&#xff1f; 本文描述了使用Java语言调用HTTP接口&#xff0c;实现控制无人售货柜&#xff0c;独立控制售货柜、格子柜的柜门。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi控…

ASP.NET网上图书预约系统的设计

摘 要 《网上图书预约系统的设计》是以为读者提供便利为前提而开发的一个信息管理系统&#xff0c;它不仅要求建立数据的一致性和完整性&#xff0c;而且还需要应用程序功能的完备、易用等特点。系统主要采用VB.NET作为前端的应用开发工具&#xff0c;利用SQL Server2000数据…

7-35 有理数均值

题目链接&#xff1a;7-35 有理数均值 一. 题目 1. 题目 2. 输入输出样例 3. 限制 二、代码 1. 代码实现 #include <iostream> using namespace std;// 计算公约数 int calGcd(int a, int b) {int gcd;bool negative false;if (a a / b * b) { // b整除areturn b;}…

Llama3-Tutorial之Llama3本地Web Demo部署

Llama3-Tutorial之Llama3本地 Web Demo部署 Llama3-Tutorial之Llama3本地Web Demo部署章节。 参考&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 1. 环境配置 conda create -n llama3 python3.10conda activate llama3conda install pytorch2.1.2 torchvision0…

【RAG 论文】SKR:Self-Knowledge 指导下的 RAG

论文&#xff1a;Self-Knowledge Guided Retrieval Augmentation for Large Language Models ⭐⭐⭐⭐ Tsinghua, arXiv:2310.05002 文章目录 一、论文速读二、实现细节2.1 数据的收集2.2 引出 LLM 的 Self-Knowledge 的方法1&#xff09;Direct Prompting2&#xff09;In-Cont…

stm32f103zet6_DAC_1_介绍

STM32微控制器系列的DAC&#xff08;数字到模拟转换器&#xff09;功能是其片上外设之一&#xff0c;用于将数字信号转换为模拟信号。DAC在许多应用中都非常有用&#xff0c;例如音频输出、模拟信号生成、闭环控制系统中作为模拟输出等。 STM32微控制器的DAC功能特点包括&…

概率论 科普

符号优先级 概率公式中一共有三种符号&#xff1a;分号 ; 、逗号 , 、竖线 | 。 ; 分号代表前后是两类东西&#xff0c;以概率P(x;θ)为例&#xff0c;分号前面是x样本&#xff0c;分号后边是模型参数。分号前的 表示的是这个式子用来预测分布的随机变量x&#xff0c;分号后的…

(论文阅读-优化器)Orca: A Modular Query Optimizer Architecture for Big Data

目录 摘要 一、简介 二、背景知识 2.1 大规模并行处理 2.2 SQL on Hadoop 三、Orca架构 四、查询优化 4.1 优化工作流 4.2 并行查询优化 五、Metadata Exchange 六、可行性 6.1 Minimal Repros 6.2 优化器准确性测试 七、实验 八、相关工作 8.1 查询优化基础 8…

自动驾驶融合定位:IMU内参模型及标定

自动驾驶融合定位&#xff1a;IMU内参模型及标定 一、 概述 标定的本质是参数辨识。首先明确哪些参数可辨识&#xff0c;其次弄清怎样辨识。 参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。 辨识就比较丰富了&#xff0c;如果让各位先不局限于标定任务&#xf…