XML --java学习笔记

XML(全称EXtensible Markup Language,可扩展标记语言)

  • 本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系

XML的特点

  • XML中的“<标签名>”称为一个标签或一个元素,一般是成对出现的
  • XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套
  • XML中只能有一个根标签
  • XML中的标签可以有属性
  • 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml

XML的创建

  • 就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello world.xml

IDEA创建XML文件

XML的语法规则

  • XML文件的后缀名为:xml,文档声明必须是第一行
  • XML中可以定义注释信息:<!--注释内容 -->
  • XML中书写”<” 、“&”等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代
  • XML中可以写一个叫CDATA的数据区:<![CDATA[…..内容... ]]>,里面的内容可以随便写

XML的作用和应用场景

  • 本质是一种数据格式,可以存储复杂的数据结构,和数据关系
  • 应用场景:经常用来做为系统的配置文件,或者作为一种特殊的数据结构,在网络中进行传输

解析XML文件

  • 使用程序读取XML文件中的数据
  • 注意:程序员并不需要自己写原始的I0流代码来解析XML,难度较大!也相当繁琐!
  • 其实,有很多开源的,好用的,解析XML的框架,最知名的是:Dom4j(第三方研发的)

使用Dom4]解析出XML文件

需求:使用Dom4]把一个XML文件的数据进行解析
分析:

  1. 下载Dom4j框架,官网下载。
  2. 在项目中创建一个文件夹:lib
  3. 将dom4j-最新版本.jar文件复制到 lib 文件夹
  4. 在jar文件上点右键,选择 Add as Library ->点击OK
  5. 在类中导包使用

DOM4J解析XML文件的思想:文档对象模型

Dom4j解析XML-得到Document对象

  • SAXReader:Dom4j提供的解析器,可以认为是代表整个Dom4j框架

Element提供的方法

代码演示:

xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<!-- 这是一个注释,上面的头部声明必须写在第一行,必须有 -->
<!--根标签只能有一个-->
<users><user id = '1'><name>李白</name><age>33</age><sex>男</sex><password>dhzjtsl</password></user><admin>zeyu</admin><user id = '2'><name>吕布</name><age>25</age><sex>男</sex><password>chanchan</password></user><user id = '3'><name>貂蝉</name><age>18</age><sex>女</sex><password>zilong</password></user><user id = '4'><name>赵云</name><age>23</age><sex>男</sex><password>chanchan</password></user>
</users>

test:

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.List;public class Dom4jTest1 {public static void main(String[] args) throws Exception {//1、创建一个Dom4J框架提供的解析器对象SAXReader saxReader = new SAXReader();//2、使用saxReader对象把需要解析的xml文件读成一个Document对象Document document = saxReader.read("properties-xml-log\\helloworld.xml");//3、从文档对象中解析xml文件的全部数据Element root = document.getRootElement();System.out.println(root.getName());//4、获取根元素下的全部一级子元素List<Element> elements = root.elements();//List<Element> admin = root.elements("admin"); 获取指定元素名的元素列表for (Element element : elements) {System.out.println(element.getName());}//5、获取当前元素下的某个子元素Element admin = root.element("admin");System.out.println(admin.getText());//如果下面有很多子元素user,默认获取第一个Element user = root.element("user");System.out.println(user.elementText("name"));//6、获取元素的属性信息//方法一System.out.println(user.attributeValue("id"));//方法二Attribute id = user.attribute("id");System.out.println(id.getName());System.out.println(id.getValue());//7、如何获取全部的文本内容:获取当前元素下的子元素文本值System.out.println(user.elementText("name"));System.out.println(user.elementTextTrim("age"));    //elementTextTrim 取出文本去除前后空格System.out.println(user.elementText("sex"));}
}

运行结果:

使用程序把数据写出到XML文件中去不建议用clom4j做

推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去!

代码演示:

package com.zeyu.xml;import java.io.BufferedWriter;
import java.io.FileWriter;public class Dom4jTest2 {public static void main(String[] args) {StringBuilder sb = new StringBuilder();sb.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n");sb.append("<student>\r\n");sb.append("\t<name>").append("李白").append("</name>\r\n");sb.append("\t<sex>").append("男").append("</sex>\r\n");sb.append("\t<height>").append("168").append("</height>\r\n");sb.append("</student>");try (BufferedWriter bw = new BufferedWriter(new FileWriter("properties-xml-log\\student.xml"));){bw.write(sb.toString());} catch (Exception e) {e.printStackTrace();}}
}

运行结果:

约束文档

  • 专门用来限制xml书写格式的文档,比如:限制标签、属性应该怎么写

约束文档分类

  • DTD文档
  • Schema文档

DTD文档

  1. 编写DTD约束文档,后缀必须是.dtd
  2. 在需要编写的XML文件中导入该DTD约束文档
  3. 然后XML文件,就必须按照DTD约束文档指定的格式进行编写,否则报错

schema

  1. 编写schema约束文档,后缀必须是.xsd,具体的形式到代码中观看
  2. 在需要编写的XML文件中导入该schema约束文档
  3. 按照约束内容编写XML文件的标签

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

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

相关文章

Doris实践——信贷系统日志分析场景的实践应用

目录 前言 一、早期架构演进 1.1 架构1.0 基于Kettle MySQL离线数仓 1.2 架构2.0 基于 Presto / Trino统一查询 二、基于Doris的新一代架构 三、新数仓架构搭建经验 3.1 并发查询加速 3.2 数仓底座建设 四、Doris助力信DolphinScheduler 和 Shell 贷业务场景落地 4.…

【Git】命令行使用体验大大优化的方法

Git的优化使用 相信很多人&#xff0c;在使用git作为版本管理工具时都会感受到它的方便&#xff0c;但是也会有一些问题困扰着我们&#xff0c;让我们觉得使用体验不是很好。我在使用git的过程中就发现了几个问题&#xff1a;写commit费时、怎么做多人开发的代码审查等等。今天…

基于springboot+vue+Mysql的在线考试系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Linux操作系统之防火墙、redis安装

目录 一、防火墙 1、防火墙的类别 2、安装iptables(四表五链&#xff09; 一、防火墙 1、防火墙的类别 安全产品 杀毒 针对病毒&#xff0c;特征篡改系统中文件杀毒软件针对处理病毒程序 防火墙 针对木马&#xff0c;特征系统窃密 防火墙针对处理木马 防火墙分为两种 硬件…

Codeforces Round 824 (Div. 2) D. Meta-set

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5; c…

设计模式——工厂模式01

工厂模式 定义&#xff1a;工厂模式是创建子类实例化对象的一种方式&#xff0c;屏蔽了创造工厂的内部细节。把创建对象与使用对象进行拆分&#xff0c;满足单一职责。如果需要向工厂中添加新商品&#xff0c; 只需要扩展子类再重写其工厂方法&#xff0c;满足开闭原则。 设计…

第十一届能源与环境研究国际会议-可再生能源走向脱碳化(ICEER 2024)即将召开!

能源和环境是当今世界至关重要的研究和教育领域&#xff0c;持续的气候危机和对可持续发展战略的迫切需求&#xff0c;需要从能源科学到地球工程等广泛领域的变革性工程解决方案和创新。ICEER 2024为来自学术界&#xff0c;研究中心和全球工业界的工程师&#xff0c;研究人员和…

以太网布局指南

2层板 顶层走信号线以及地平面底层走信号线以及地平面信号走线应至少沿一条边被接地或接地走线包围如果使用地走线&#xff0c;应接本层接地平面&#xff0c;与上层接地平面解耦。 4层板 当信号走线被重新引用到功率平面时&#xff0c;在地平面和功率平面之间需要去耦电容器(0…

SAP HCM 多成本中心薪酬过账标准程序解读

SAP HCM薪酬过账会涉及到CO对象&#xff0c;CO对象主要是成本中心、WBS、内部订单、订单等&#xff0c;成本中心有多个维护地方0001信息类型0027信息类型等&#xff0c;那么成本中心多个地方维护&#xff0c;优先级是如何&#xff0c;0027>1018>0001,也就是说人身上的优先…

【数据结构(一)】初识数据结构

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.集合架构3.时间和空间复杂度3.1算法效率3.2时间复杂度3.2.1大O的渐进…

Golang | Leetcode Golang题解之第10题正则表达式匹配

题目&#xff1a; 题解&#xff1a; func isMatch(s string, p string) bool {m, n : len(s), len(p)matches : func(i, j int) bool {if i 0 {return false}if p[j-1] . {return true}return s[i-1] p[j-1]}f : make([][]bool, m 1)for i : 0; i < len(f); i {f[i] m…

matlab中角度-弧度转化

在 MATLAB 中进行角度和弧度之间的转换可以使用内置的函数&#xff1a; 1. 将角度转换为弧度&#xff1a; matlab rad deg * pi / 180; 这里 deg 是你想要转换的角度值&#xff0c;pi 是 MATLAB 内置的圆周率常量。 2. 将弧度转换为角度&#xff1a; matlab…

SQLite的架构(十一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite下一代查询规划器(十&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 介绍 本文档介绍SQLite库的架构。 这里的信息对那些想要了解或 修改SQLite的内部工作原理。 接口SQL 命令处理器虚拟机B-树…

C++ //练习 11.14 扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair的vector,保存孩子的名和生日。

C Primer&#xff08;第5版&#xff09; 练习 11.14 练习 11.14 扩展你在11.2.1节练习&#xff08;第378页&#xff09;中编写的孩子姓到名的map&#xff0c;添加一个pair的vector&#xff0c;保存孩子的名和生日。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#x…

Python云计算技术库之libcloud使用详解

概要 随着云计算技术的发展,越来越多的应用和服务迁移到了云端。然而,不同云服务商的API和接口千差万别,给开发者带来了不小的挑战。Python的libcloud库应运而生,它提供了一个统一的接口,让开发者可以轻松地管理不同云服务商的资源。本文将深入探讨libcloud库的特性、安装…

【二】Django小白三板斧

今日内容 静态文件配置 request对象方法初识 pycharm链接数据库&#xff08;MySQL&#xff09; django链接数据库&#xff08;MySQL&#xff09; Django ORM简介 利用ORM实现数据的增删查改 【一】Django小白三板斧 HttpResponse 返回字符串类型的数据 render 返回HTML文…

第20次修改了可删除可持久保存的前端html备忘录:重新布局

第20次修改了可删除可持久保存的前端html备忘录&#xff1a;重新布局 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

文心一言 VS 讯飞星火 VS chatgpt (230)-- 算法导论17.1 1题

一、如果栈操作包括 MULTIPUSH 操作&#xff0c;它将 k 个数据项压入栈中&#xff0c;那么栈操作的摊还代价的界还是 O(1) 吗? 文心一言&#xff1a; 在栈的基本操作中&#xff0c;我们通常考虑的是单个元素的压入&#xff08;push&#xff09;和弹出&#xff08;pop&#x…

前端三剑客 —— CSS ( 坐标问题 、定位问题和图片居中 )

前期内容回顾&#xff1a; 1.常见样式 text-shadow x轴 y轴 阴影的模糊程度 阴影的颜色 box-shadow border-radio 实现圆角 margin 内边距 padding 外边距 background 2.特殊样式 媒体查询&#xff1a;media 自定义字体&#xff1a;font-face { font-family:自定义名称&#…

欧拉角及其旋转矩阵,旋转顺序与内旋/外旋及其代码

目录 欧拉角介绍 旋转矩阵公式推导 旋转顺序 内旋/外旋 欧拉角介绍 欧拉角&#xff1a; 横滚&#xff1a;roll&#xff08;绕X轴旋转&#xff09;&#xff1b; 俯仰&#xff1a;pitch&#xff08;绕Y轴旋转&#xff09;&#xff1b; 偏航&#xff08;也称航向角&#x…