详解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.rhkb.cn/news/321025.html

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

相关文章

大数据与会计专业主要学什么课程

大数据与会计专业是一个结合了传统会计知识与现代大数据技术的交叉学科&#xff0c;旨在培养既懂会计又熟悉大数据分析的复合型人才。该专业的学生将会学习以下主要课程内容&#xff1a; 会计基础课程&#xff1a;包括基础会计、财务会计、成本会计、管理会计等&#xff0c;这些…

【UE5】数字人基础

这里主要记录一下自己在实现数字人得过程中涉及导XSens惯性动捕&#xff0c;视频动捕&#xff0c;LiveLinkFace表捕&#xff0c;GRoom物理头发等。 一、导入骨骼网格体 骨骼网格体即模型要在模型雕刻阶段就要雕刻好表捕所需的表情体(blendshape)&#xff0c;后面表捕的效果直…

Elasticsearch 索引 blocks:深入探讨数据保护

Elasticsearch 作为搜索和分析数据的首选分布式引擎在技术领域脱颖而出&#xff0c;尤其是在处理日志、事件和综合文本搜索时。 它的与众不同之处在于它如何让你使用各种块选项调整对其索引的访问。 这对于那些负责技术项目的人&#xff08;比如管理员和编码员&#xff09;来说…

LTE的EARFCN和band之间的对应关系

一、通过EARFCN查询对应band 工作中经常遇到只知道EARFCN而需要计算band的情况&#xff0c;因此查了相关协议&#xff0c;找到了他们之间的对应关系&#xff0c;可以直接查表&#xff0c;非常方便。 具体见&#xff1a; 3GPP TS 36.101 5.7.3 Carrier frequency and EAR…

Leetcode—1235. 规划兼职工作【困难】(upper_bound、自定义排序规则)

2024每日刷题&#xff08;125&#xff09; Leetcode—1235. 规划兼职工作 算法思想 实现代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vec…

doris经典bug

在部署完登录web页面查看的时候会发现只有一个节点可以读取信息剩余的节点什么也没读取到 在发现问题后&#xff0c;我们去对应的节点去看log日志&#xff0c;发现它自己绑定到前端的地址上了 现在我们已经发现问题了&#xff0c;以下就开始解决问题 重置doris 首先对be进行操…

代码审计提升系统安全,为企业数字化繁荣保驾护航

近年来&#xff0c;软件安全事件频发&#xff0c;凸显出严峻的信息系统安全形势&#xff0c;传统的安全防护机制已经无法帮助企业实现安全保障。忽视软件代码自身的安全性&#xff0c;仅依靠外围防护、事后修补&#xff0c;无法深层次发现和解决软件迭代开发过程中存在的潜在安…

一键实现在VS Code中绘制流程图

VS Code是一款常用的IDE&#xff0c;受到许多用户的欢迎和喜爱。而其较为出众的一点&#xff0c;就是较好的可拓展性&#xff0c;即丰富的插件应用&#xff0c;这些应用可以极大地提高生产效率&#xff0c;并优化日常使用。 流程图是一种直观的图示方法&#xff0c;可以用简明…

Fastadmin 日常项目常见用法整理

ps&#xff1a;自己使用笔记备用&#xff0c;不间断更新&#xff0c;常见功能点 一&#xff0c;数据库后缀 结尾字符示例类型要求字段说明timerefreshtimebigint/datetime识别为日期时间型数据&#xff0c;自动创建选择时间的组件imagesmallimagevarchar识别为图片文件&#…

谷歌推广和seo收录是一回事吗?

那自然不是一回事&#xff0c;谷歌推广一般指的是谷歌的广告服务&#xff0c;通过购买广告位&#xff0c;以便用户在谷歌搜索特定关键词时显示您的广告&#xff0c;这种方式通常基于点击收费&#xff0c;意味着您只有在有人点击您的广告时才需要支付费用。谷歌推广可以让您的网…

加密技术在保护企业数据中的应用

加密技术是企业数据保护的核心&#xff0c;对于维护信息安全至关重要。透明加密技术使文件加密后不改变用户对文件的使用习惯&#xff0c;内部文件打开自动解密&#xff0c;存储自动加密&#xff0c;一旦离开使用环境&#xff0c;加密文件将无法正常读取&#xff0c;从而保护文…

【Java】第二讲:字符串相关类

个人主页&#xff1a;深情秋刀鱼-CSDN博客 Java专栏&#xff1a;Java程序设计 目录 一、String 1.Java中的数据类型 2.字符串概述 3.字符串构造方法 4.字符串构造内存原理 5.字符串比较 6.字符串常见方法 二、StringBuilder 1.定义 2.常用方法 3.StringBuilder内存分…

04-xss获取cookie实验

二、开发XSS服务器端 1、确认实验环境 攻击者服务器&#xff1a;192.168.74.134&#xff0c;将获取到cookie数据保存到该服务器的数据库中&#xff0c;运行PHP代码暴露一个接收Cookie的URL地址。 正常Web服务器&#xff1a;192.168.74.133&#xff0c;用于正常的用户访问的目…

【介绍下大数据组件之Storm】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

《我的医养信息化之路》之三十四:家庭健康管理员

在2019年的健康中国行动中&#xff0c;国家出台《关于实施健康中国行动的意见》、《健康中国行动&#xff08;2019—2030&#xff09;》、《中国公民健康素养66条》、《关于全面开展健康家庭建设的通知》等多份文件&#xff0c;提出每个人都是自己健康的第一责任人&#xff0c;…

Linux磁盘IO、网络IO、零拷贝详解

一、什么是I/O&#xff1f; 在计算机操作系统中&#xff0c;所谓的I/O就是输入&#xff08;input&#xff09;和输出&#xff08;output&#xff09;,也可以理解为读&#xff08;read&#xff09;和写&#xff08;write&#xff09;,针对不同的对象&#xff0c;I/O模式可以划分…

【代码随想录——哈希表】

1.哈希表理论基础 首先什么是 哈希表&#xff0c;哈希表&#xff08;英文名字为Hash table&#xff0c;国内也有一些算法书籍翻译为散列表&#xff0c;大家看到这两个名称知道都是指hash table就可以了&#xff09;。 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用…

windows安装ElasticSearch以及踩坑

1.下载 elasticsearch地址&#xff1a;Past Releases of Elastic Stack Software | Elastichttps://www.elastic.co/cn/downloads/past-releases#elasticsearch IK分析器地址&#xff1a;infinilabs/analysis-ik: &#x1f68c; The IK Analysis plugin integrates Lucene IK…

【网站项目】戒烟网站

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【Unity Shader入门精要 第4章】数学基础(二)

1. Unity中的坐标空间 1.1 五个坐标空间 模型空间 模型自身的3D坐标系空间&#xff0c;左手坐标系是一个相对空间&#xff0c;坐标轴指向随模型旋转变化当物体有父节点时&#xff0c;Transform组件中各属性的值表示的即为该物体在其父物体的模型空间中的值当模型顶点传入顶点…