XML:DOM4j解析XML
XML简介:
什么是XML:XML 是独立于软件和硬件的信息传输工具。
- XML 的设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
- XML不会做任何事情,XML被设计用来结构化、存储以及传输信息。
XML可以发明自己的标签:
HTML仅仅可以用在 标准中定义过的标签
而XML没有预定义的标签,XML允许创作者定义自己的标签和自己的文档结构
特点:
XML与操作系统、编程语言的开发平台无关实现不同系统之间的数据交换
作用:
数据交互配置应用程序和网站Ajax基石
文档声明:
<?xml version="1.0" encoding="UTF-8"?>
属性值用双引号包裹
一个元素可以有多个属性
属性值中不能直接包含<、“、&
不建议使用的字符:‘、>
XML编写注意事项:
- 所有XML元素都必须有结束标签
- XML标签对大小写敏感XML必须正确的嵌套
- 同级标签以缩进对齐
- 元素名称可以包含字母、数字或其他的字符
- 元素名称不能以数字或者标点符号开始
- 元素名称中不能含空格
- 属性必须加”“
XML 文档:
- XML文件必须要有根元素,这里的class就是根元素,
- 元素可以包含属性,属性提供有关元素的附加信息,属性位于开始标签中。
<?xml version="1.0" encoding="UTF-8"?>
<class><student name="王显明"><score predicted="75" actualScore="80" /></student><student name="宋佳"><score predicted="75" actualScore="88" /></student>
</class>
XML实体引用:
在xml这样是错误的,因为xml会把<当作一个新的开始标签
<message>if salary < 1000 then</message>
为了为避免我们就可以用实体标签:
< | ⁢ |
> | > |
& | & |
' | ' |
" | " |
CDATA区:
CDATA
区段中的内容不会被 XML 解析器处理为 XML 标签或特殊字符,而是作为纯文本来处理。
<content><![CDATA[aaaa<<<>>>]]></content>
XML注释:
和html的注释一样
<!-- This is a comment -->
xml的空格:
在html中空格会被合并为1个,但是XML中空格不会被删减
XML元素:
元素命名规则:
- 名称可以包含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母 xml(或者 XML、Xml 等等)开始
- 名称不能包含空格
XML属性:
- 属性值必须被引号包围,不过单引号和双引号均可使用。
<person sex="female">
也可以
<person sex='female'>
没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。
XML命名空间:
xmlns:[前缀属性] ="[命名空间的URL]"
解决在复杂、大型XML文件中,出现名称相同,但是含义不同的元素
这样可以在同一个文档中使用 book
和 author
命名空间下的元素,避免名称冲突并保持数据结构的清晰性。
xmlns:book="http://www.example.com/book"
定义了一个名为book
的命名空间,用于描述书籍相关的元素。xmlns:author="http://www.example.com/author"
定义了一个名为author
的命名空间,用于描述作者相关的元素。
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns:book="http://www.example.com/book" xmlns:author="http://www.example.com/author"><book:title>The Great Gatsby</book:title><author:name>F. Scott Fitzgerald</author:name>
</document>
DOM4j解析XML:
1.DOM解析XML
DOM把XML文档映射成一个倒挂的树
访问DOM树节点:
<?xml version="1.0" encoding="GB2312"?>
<PhoneInfo><Brand name="华为"><Type name="U8650"/><Type name="HW123"/><Type name="HW321"/></Brand><Brand name="苹果"><Type name="iPhone4"/></Brand>
</PhoneInfo>
package QuestionPpt02;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.List;public class UtilPhone {public static void main(String[] args) {//将xml文件加载到内存中 XM;解析器SAXReader saxReader = new SAXReader();//加载执行获取Document对象try {Document document = saxReader.read("D:\\idea-workspace\\Book03\\ch010\\src\\QuestionPpt02\\phone.xml");//获取根节点Element rootElement = document.getRootElement();//获取该节点下的所有子节点List<Element> Elist = rootElement.elements();for (Element e : Elist){System.out.println("子节点为_____________________"+e.getName()+"____________________________________");//获取当前点下所有子节点List<Element> EChild = e.elements();for (Element child : EChild){System.out.println("Brand的子节点为_________"+child.getName());System.out.println("获取当前节点属性"+child.attributeValue("name"));}//获取当前节点的属性System.out.println( e.attributeValue("name"));}} catch (DocumentException e) {throw new RuntimeException(e);}}
}
具体的DOM4j的pdf地址:
"D:\AAAhz鸿卓\2Java三本书\高级编程\高级编程资料\dom4j解析XML.doc"
例题:
写入的时候需要先获取文档对象读再获取写入对象写
public class UtilsXml {public static void main(String[] args) {//读取XML//showXml();editXml();}/*** 修改文档内容*/public static void editXml(){try {//读取原有的文档//构建解析器SAXReader saxReader = new SAXReader();//通过read方法获得doc对象Document document = saxReader.read("ch10/students.xml");//获得根节点Element root = document.getRootElement();List<Element> elementList = root.elements();for(Element element:elementList){if("1002".equals(element.attributeValue("id"))){element.element("name").setText("王五");}}//新增节点Element stu = root.addElement("stu");stu.addAttribute("id","1003");stu.addElement("name").setText("马六");stu.addElement("age").setText("20");stu.addElement("score").addAttribute("value","77");//document 写入students.xmlXMLWriter xmlWriter = new XMLWriter(new FileWriter("ch10/students.xml"));xmlWriter.write(document);xmlWriter.close();} catch (Exception e) {e.printStackTrace();}}public static void showXml(){try {//构建解析器SAXReader saxReader = new SAXReader();//通过read方法获得doc对象Document document = saxReader.read("ch10/students.xml");//获得根节点Element root = document.getRootElement();//打印根节点名称System.out.println("根节点:"+root.getName());//获得所有子节点List<Element> elements = root.elements();for(Element element : elements){System.out.println("---------stu--------");//获得每个子节点上的id属性值String id = element.attributeValue("id");System.out.println("id:"+id);//获得stu下name元素节点Element name = element.element("name");System.out.println("name:"+name.getText());Element age = element.element("age");System.out.println("age:"+age.getText());Element score = element.element("score");System.out.println("score:"+score.attributeValue("value"));}} catch (Exception e) {e.printStackTrace();}}
}
dom4j解析XML:
1.读取xml文件 SAXReader()
//将xml文件加载到内存中 XML解析器
SAXReader saxReader = new SAXReader();
//document 加载执行xml文档获取Document对象
Document document = saxReader.read(XML路径);
2.获取XML根节点getRootElement()
Element rootElement = document.getRootElement();
3.获取当前节点下所有子节点 elements()
//获取根节点下所有子节点
List<Element> Elist = rootElement.elements();
4.根据指定子元素名,获取元素下所有子节点
//获取节点名称为books下所有子节点
List<Element> Elist = rootElement.elements(“books”);
5.根据指定子元素名,获取子元素对象,如果重复,则获取第一个
//获取节点名称为books下单个子节点
Element element= rootElement.element(“books”);
6.设置元素文本内容 setText()
newelement.setText("内容");
7.获取当前节点文本内容 getText()
elenent.getText()
8.根据指定子元素名,获取元素中的文本
e.elementText(“book”)
9.获取当前节点属性 attributeValue(“属性名”)
e.attributeValue("name")
11.创建节点Element对象.addElement("节点名")
Element newelement = rootElement.addElement("span");
12.节点添加,修改属性Element对象.addAttribute("节点属性名",“属性值”)
newelement.addAttribute("type","属性值");
13.新XML添加Documen对象
通过DocumentHelper.creatDocument()创建一个Document对象
Document read = DocumentHelper.createDocument();
14.设置XML编码
通过OutputFormat的静态方法createPrettyPrint()创建OutputFormat对象,并设置编码集
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
15.写入XML文件
//写入XML文件的位置 以及指定的格式
XMLWriter xmlWriter=new XMLWriter(new FileWriter("cs.xml"),outputFormat);
//开始写入XML文件 写入Document对象
xmlWriter.write(document);
xmlWriter.close();
相关文章:

XML:DOM4j解析XML
XML简介: 什么是XML:XML 是独立于软件和硬件的信息传输工具。 XML 的设计宗旨是传输数据,而不是显示数据。XML 标签没有被预定义。您需要自行定义标签。XML不会做任何事情,XML被设计用来结构化、存储以及传输信息。 XML可以发明…...
15.5 创建监控控制平面的service
本节重点介绍 : k8s中service的作用和类型创建k8s控制平面的service 给prometheus采集用, 类型clusterIp kube-schedulerkube-controller-managerkube-etcd service的作用 Kubernetes Service定义了这样一种抽象: Service是一种可以访问 Pod逻辑分组…...

【Docker Nexus3】maven 私库
1.部署环境 window 11 x64Docker Desktop 4.34.1 (166053) Docker Engine v27.2.0 1.1.Docker 镜像源 1.1.1.Docker Engine 配置 {"builder": {"features": {"buildkit": true},"gc": {"defaultKeepStorage": "32…...

Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互
文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…...
MySQL:用户管理
添加用户 create user usernamelocalhost identified by user_password;删除用户 drop user usernamelocalhost;查看所有用户 输入格式 select user,host from mysql.user; 输出 mysql> select user,host from mysql.user; ----------------------------- | user …...

论文《Mixture of Weak Strong Experts on Graphs》笔记
【Mowst 2024 ICLR】论文提出了一种新的图神经网络架构,称为Mixture of weak and strong experts(Mowst),通过将轻量级的多层感知机(MLP)作为弱专家和现成的GNN作为强专家相结合,以处理图中的节…...

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(3)】
【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(3)】 1、前言说明2、流程说明3、现场提交(线下)4、网上提交1-起诉书样例2-起诉书编写(1)原告信息:&…...

数据结构(Day14)
一、学习内容 结构体 概念 引入:定义整数赋值为10 int a10; 定义小数赋值为3.14 float b3.14; 定义5个整数并赋值 int arr[5] {1 , 2 , 3 , 4 ,5}; 定义一个学生并赋值学号姓名成绩 定义一个雪糕并赋值名称产地单价 问题:没有学生、雪糕 数据类型 解决&…...

Paragon NTFS for Mac和Tuxera NTFS for Mac,那么两种工具有什么区别呢?
我们在使用Mac系统读取U盘的过程中往往会遇到一个问题,那就是U盘插进电脑无法显示,或者只能读取不能编辑。出现这种情况的原因就一般是格式错误。 很多小伙伴在解决这种问题的时候会选择使用U盘读写工具,那么哪一种读写工具比较好呢…...
HashTable结构体数组实现
写了个哈希表,底层逻辑基于结构体数组,核心结构:HashNode,结构外壳:HashTable_R,冲突处理以后会加的(QwQ)~ 目前代码: #ifndef PYIC_X #define PYIC_Xunsigned int PYIC_Hash(unsigned int Val, unsigned int Mov) {unsigned int Ht[4] { …...
Python 管理 AWS ElastiCache 告警
在 AWS 环境中,监控和管理 ElastiCache 集群的性能是至关重要的。本文将介绍如何使用 Python 和 AWS SDK (boto3) 来自动创建和删除 ElastiCache 集群的 CloudWatch 告警。我们将分两部分来讨论:创建告警和删除告警。 第一部分:创建 ElastiCache 告警 首先,让我们看看如何…...

【无人机设计与控制】四旋翼无人机俯仰姿态保持模糊PID控制(带说明报告)
摘要 为了克服常规PID控制方法在无人机俯仰姿态控制中的不足,本研究设计了一种基于模糊自适应PID控制的控制律。通过引入模糊控制器,实现了对输入输出论域的优化选择,同时解决了模糊规则数量与控制精度之间的矛盾。仿真结果表明,…...

[数据集][目标检测]不同颜色的安全帽检测数据集VOC+YOLO格式7574张5类别
重要说明:数据集里面有2/3是增强数据集,请仔细查看图片预览,确认符合要求在下载,分辨率均为640x640 数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件…...
确保 App 跟踪透明度权限:Flutter 中的实践
确保 App 跟踪透明度权限:Flutter 中的实践 在数字广告领域,用户隐私保护已成为一个重要议题。随着 iOS 14 的发布,Apple 引入了 App Tracking Transparency (ATT) 框架,要求开发者在跟踪用户行为以提供个性化广告之前必须获得用…...

李沐 过拟合和欠拟合【动手学深度学习v2】
模型容量 模型容量的影响 估计模型容量 难以在不同的种类算法之间比较,例如树模型和神经网络 给定一个模型种类,将有两个主要因素: 参数的个数参数值的选择范围 VC维...
Go Testify学习与使用
文章目录 1. **安装 Testify**2. **Testify 的主要功能**3. **Testify 使用示例**3.1 断言 (Assertions)3.2 使用 require3.3 使用 Mock3.4 测试套件 (Test Suites) 4. **Testify 的其他功能**5. **总结**常用资源 Testify 是 Go 语言中一个常用的单元测试库,它为标…...

Word中引用参考文献和公式编号的方法
文章目录 应用参考文献对于单个文献引用多于多个文献同时引用 公式编号手动编号自动编号 参考: 应用参考文献 对于单个文献引用 word中的参考文献用交叉应用实现。 首先,将参考文献编号: 然后,在需要引用的地方用交叉引用插入…...

[数据集][目标检测]智慧养殖场肉鸡目标检测数据集VOC+YOLO格式3548张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3548 标注数量(xml文件个数):3548 标注数量(txt文件个数):3548 标注…...

Vision Transform—用于大规模图像分类的Transformers架构
VIT — 用于大规模图像识别的 Transformer 论文题目:AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE。 官方代码:https://github.com/google-research/vision_transformer 引言与概述 Vision Transformer(ViT&…...
内核驱动开发之系统移植
系统移植 系统移植:定制linux操作系统 系统移植是驱动开发的前导,驱动开发是系统运行起来之后,在内核中新增一些子功能而已 系统移植就四个部分: 交叉编译环境搭建好bootloader的选择和移植:BootLoader有一些很成熟…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...