【XML详解】

news2024/11/15 12:32:17

XML基本概念

  • XML(全称EXtensible Markup Language,可扩展标记语言):是一种用于存储和传输数据的标记语言,通过标签(tags)来定义数据的结构和含义。
  • 数据格式:XML本质上是一种数据的格式,它可以用来存储复杂的数据结构以及数据之间的关系。

XML文件的特点

  1. 开始标签和结束标签:XML文件的结构通常以开始标签和结束标签的形式呈现,例如<users></users>
  2. 注释:XML文件允许包含注释,这些注释以<!--开始,以-->结束,例如<!--这是注释-->
  3. 版本信息:XML文件通常包含版本信息,例如<?xml version="1.0" encoding="UTF-8"?>,这表明文件遵循XML 1.0规范,并使用UTF-8编码。
  4. 根标签:XML文件中只能有一个根标签,它是所有其他标签的父标签,例如<users>
  5. 标签名和属性:XML中的标签名(如<user><name>等)可以自行定义(即可扩展),但标签必须正确嵌套。标签还可以有属性(如<user id="1">中的id="1"),用于提供关于标签的额外信息。
  6. 编码:XML文件可以使用不同的编码来保存字符,但UTF-8编码因其兼容性和灵活性而被广泛使用。

XML文件示例

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user id="1">
        <name>黄策吾</name>
        <password>123456789</password>
        <address>城固</address>
        <sex>男</sex>
    </user>
    <user id="2">
        <name>赵敏</name>
        <password>8888</password>
        <address>光明小区</address>
        <sex>女</sex>
    </user>
</users>

在这个示例中,<users>是根标签,它包含了两个<user>标签,每个<user>标签代表一个用户,并包含用户的idnamepasswordaddresssex信息。

IDEA创建XML文件

 XMI语法规则详解

 XML文件的基本规则

  • 后缀名:XML文件的后缀名通常为.xml
  • 文档声明:XML文档的第一行必须是文档声明,它指定了XML的版本和编码方式。
    例如:<?xml version="1.0" encoding="UTF-8"?>
  • 版本号和编码
    • version:指定XML的默认版本号码,通常是1.0,这个属性是必须存在的。
    • encoding:指定本XML文件的编码方式,常用的有UTF-8GBK等。

 特殊字符的转义

  • 在XML中,某些字符(如<&>'")具有特殊含义,如果需要在文本中直接使用这些字符,需要使用它们的转义序列来替代。例如:
    • &lt;    小于号<
    • &gt;    大于号>
    • &amp;    和 号&
    • &apos;   单引号'
    • &quot;   双引号"

CDATA区

  • CDATA区(Character Data Section)允许在XML文档中直接包含不需要被解析器解析的文本。CDATA区以 <![CDATA[ 开头,以 ]]> 结束。在CDATA区内的文本,包括特殊字符,都将被视为普通文本处理,不会进行任何转义或解析。啊?

 XML的应用

XML的作用

  1. 数据交换:XML可以作为不同系统或应用之间交换数据的标准格式。由于其结构化和可扩展性,它能够清晰地表示复杂的数据结构,使得数据交换更加高效和准确。
  2. 数据存储:XML可以作为数据的存储格式,尤其是在需要保持数据结构和内容清晰易读时。虽然它不如数据库系统高效,但在某些情况下(如配置文件),XML的易用性和可读性使其成为首选。
  3. 网络传输:在网络通信中,XML常被用作传输数据的格式。其结构化特性使得数据在网络中传输时更加可靠和易于解析。

XML的应用场景

  1. 配置文件:XML常被用作配置文件的格式,因为它允许用户自定义标签,从而以清晰、灵活的方式描述配置项。
  2. Web服务:在Web服务中,XML是SOAP(Simple Object Access Protocol)消息的基础,用于在Web上交换结构化信息。
  3. 数据表示:XML可用于表示各种类型的数据,如书籍、音乐、天气信息等。由于其可扩展性,XML能够灵活地适应各种数据结构和需求。
  4. 应用程序之间的通信:不同应用程序之间可以通过XML交换数据,从而实现功能集成和数据共享。

 解析XML文件 

使用Dom4j解析出xml文件

  • 下载Dom4j框架:指导用户从官网下载Dom4j库,这是实现XML解析功能的前提。
  • 项目文件夹设置
    1. 在项目中创建一个名为“lib”的文件夹,用于存放第三方库文件。
    2. 将下载的dom4j-2.1.3.jar文件(或其他版本)复制到lib文件夹中。
    3. 在jar文件上右键操作,选择“Add as Library”并确认,以便将Dom4j库添加到项目的依赖中。
  • 在类中导包使用:在Java代码中,通过import语句导入Dom4j库的相关类,以便在代码中使用其提供的API进行XML解析。

Dom4j的DOM实现

只能自上而下层层解析

Dom4j在解析XML文件时,采用了DOM的思想,但相比于传统的DOM解析器,Dom4j提供了更简洁、更高效的API。以下是Dom4j解析XML文件并构建文档对象模型的主要步骤:

  1. 创建解析器
    • Dom4j使用SAXReader类作为主要的解析器。SAXReader能够读取XML文件或输入流,并将其解析成一个Document对象。
  2. 读取XML文件
    • 通过SAXReader的read()方法,可以读取XML文件或输入流,并返回一个Document对象。这个Document对象代表了整个XML文档的根节点。
  3. 构建文档对象模型
    • Document对象是一个树形结构的根,它包含了XML文档中的所有节点。这些节点可以是元素节点(Element)、属性节点(Attribute)、文本节点(Text)等。
    • 通过Document对象,可以访问XML文档的根元素,并进一步遍历整个文档树,获取或修改其中的节点和属性。
  4. 遍历文档树
    • Dom4j提供了多种遍历文档树的方法,如使用elementIterator()遍历元素节点,使用attributeIterator()遍历属性节点等。
    • 开发者可以根据需要选择合适的遍历方法,以访问和处理XML文档中的特定节点和属性。
  5. 操作XML文档
    • 除了读取和遍历XML文档外,Dom4j还允许开发者对XML文档进行增删改查等操作。
    • 例如,可以使用addElement()方法添加新的元素节点,使用setText()方法修改节点的文本内容,使用remove()方法删除节点等。

 代码详解过程

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class MainXML {
    public static void main(String[] args) throws Exception {
        //1、创建一个Dom4j框架提供的解析器对象
        SAXReader saxReader=new SAXReader();
        
        //2、使用saxReader对象把XML文件读成一个Document对象
        Document document=
                saxReader.read("E:\\code\\javese\\summerVacation\\src\\666.xml");
        
        //3、从文档对象中解析XML文件的全部数据。
        Element root=document.getRootElement();
        System.out.println(root.getName());
    }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user id="1" data="8888" >
        <name>黄策吾</name>
        <password>123456789</password>
        <address>城固</address>
        <sex>男</sex>
    </user>
    <user id="2">
        <name>赵敏</name>
        <password>8888</password>
        <address>光明小区</address>
        <sex>女</sex>
    </user>
</users>



import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class MainXML {
    public static void main(String[] args) throws Exception {
        //1、创建一个Dom4j框架提供的解析器对象
        SAXReader saxReader=new SAXReader();

        //2、使用saxReader对象把XML文件读成一个Document对象
        Document document=
                saxReader.read("E:\\code\\javese\\summerVacation\\src\\666.xml");

        //3、从文档对象中解析XML文件的全部数据。
        Element root=document.getRootElement();
        System.out.println(root.getName());
        //输出:users

        //4、获取根元素下的全部一级子元素
        List<Element> elements= root.elements();
        for (Element element : elements) {
            System.out.println(element.getName());
        }
        //输出:user
        //     user

        //5、获取当前元素下的某个子元素
        //如果有多个子元素,默认获取第一个
        Element user =root.element("user");
        System.out.println(user.elementText("name"));
        //输出:黄策吾

        //6、获取元素的属性信息
        System.out.println(user.attributeValue("id"));//1
        //或
        Attribute id=user.attribute("id");
        System.out.println(id.getName()+" "+ " "+id.getValue());//id  1
        //拿到所有属性
        List<Attribute> attributes=user.attributes();
        for (Attribute attribute : attributes) {
            System.out.println(attribute.getName()+"="+attribute.getValue());
        }
        //id=1
        //data=8888

        //7、如何获取全部的文本内容:获取当前元素下的子元素文本值
        System.out.println(user.elementText("name"));//黄策吾
        //或
        Element name=user.element("name");
        System.out.println(name.getText());//黄策吾
    }
}

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

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

相关文章

【异常错误】pycharm可以在terminal中运行,但是无法在run中运行(没有输出错误就停止了)

问题&#xff1a; pycharm的命令可以在terminal中运行&#xff0c;但是复制到无法在run中运行&#xff08;没有输出错误就停止了&#xff09; run中运行后什么错误提示都没有 搞不懂为什么 解决&#xff1a; 降低run中batch-size的大小&#xff0c;即可以运行 我并没有观察到…

视频在线去水印解析相册怎么弄,轻松掌握五大技巧

在当前短视频流行的时代&#xff0c;我们常常需要下载一些短视频来进行剪辑或分享&#xff0c;但视频中的水印却成了一个不小的烦恼。为了帮助大家解决这个问题&#xff0c;本文将介绍五款高效的短视频去水印免费软件&#xff0c;让你轻松告别水印烦恼。 工具一&#xff1a;奈…

在VB.net中,LINQ有什么方法与属性

标题 在VB.net中&#xff0c;LINQ有什么方法与属性 正文 在VB.NET中使用LINQ&#xff08;Language Integrated Query&#xff09;&#xff0c;你可以利用一系列的方法和属性来查询和操作内存中的集合&#xff08;如数组、列表等&#xff09;以及数据库等数据源。LINQ提供了丰富…

Python相关系数导图

&#x1f3af;要点 量化变量和特征关联绘图对比皮尔逊相关系数、斯皮尔曼氏秩和肯德尔秩汽车性价比相关性矩阵热图大流行病与资产波动城镇化模型预测交通量宝可梦类别特征非线性依赖性捕捉向量加权皮尔逊相关系数量化图像相似性 Python皮尔逊-斯皮尔曼-肯德尔 皮尔逊相关系…

QcomboBox 组件

在记事本项目中&#xff0c;有一个问题&#xff0c;字体的编码格式是写死的。我们要建一个 组件提供这样的功能&#xff1a;通过点击&#xff0c;获得 不同的格式编码 定义它的槽 首先 把ui里面的comboBox组件与槽关联起来 connect(ui->comboBox,SIGNAL(currentIndexChange…

cesium加载矢量切片数据(mvt)全网方案总结

引言:Cesium是一款开源的3D地球可视化引擎,支持全球范围的数据展示,包括高分辨率地形、卫星图像和建筑模型等,允许用户创建交互式的3D地图,并提供了一系列的工具和API来处理地理空间数据。 Cesium支持加载多数据源的栅格切片数据,例如ArcGIS、BingMaps、WMTS、WMS等等。栅…

Qt 线程与窗体之间的传值

QThread 和窗口之间的通信通常通过信号和槽机制来实现 也可以直接通过调用线程中的值 效果图(Dialog To hello; TextLabel To hello) 在主窗口类中创建线程实例&#xff0c;并连接线程发出的信号到主窗口的槽函数。 .h #ifndef TESTAPP_H #define TESTAPP_H#include <QD…

Threejs学习-Stats 性能监控器、抗锯齿

stats性能监控器 import Stats from three/addons/libs/stats.module.js //引入包//添加性能监视器&#xff0c;查看帧率 const stats new Stats(); document.body.appendChild(stats.domElement); // //渲染 function animate() {requestAnimationFrame(animate);stats.upda…

GraphRAG论文解读

欢迎一起讨论 论文地址综述介绍部分核心翻译翻译解释重要的信息元素和实体的关系&#xff08;包含和被包含&#xff0c;而非相等&#xff09;Graph Index&#xff08;图索引&#xff09;Community Detection&#xff08;社区检测&#xff09;Query-Focused Summarization&#…

Qt+FFmpeg开发视频播放器笔记(二):界面UI搭建

效果图 主要使用无边框窗体搭建,实现窗体的拖动和缩放&#xff0c;播放列表、文件打开等。 主要代码 manwindow设计类 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QMutex> #include "framelesshelper.h"QT_BEGIN_NA…

力扣最热一百题——6.三数之和

目录 题目链接&#xff1a;15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示 解法一&#xff1a;双指针 代码分析 总结 没啥多说的&#xff0c;就是最近CS根本上不了分谢谢。 题目链接&#xff1a;15. 三数之和 - 力扣&#xff08;LeetCode&…

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 精读

1 传统视图合成和NeRF&#xff08;Neural Radiance Fields&#xff09; 1.1 联系 传统视图合成和NeRF的共同目标都是从已有的视角图像中生成新的视角图像。两者都利用已有的多视角图像数据来预测或合成从未见过的视角。 1.2 区别 1.2.1 几何表示方式 传统视图合成&#xff…

frameworks 之InputReader

frameworks 之InputReader InputManagerService 初始化InputManagerService 启动InputReader 事件的读取设备节点注册和监听设备输入事件的读取 InputReader 事件的处理设备的添加和删除处理触摸事件的处理数据的加工和分发 android 输入事件 主要分 2个流程 事件读取 和 事件…

先进提示词工程

大型语言模型 (LLM) 的普及彻底改变了我们人类解决问题的方式。在过去&#xff0c;用计算机解决任何任务&#xff08;例如&#xff0c;重新格式化文档或对句子进行分类&#xff09;都需要创建一个程序&#xff08;即根据某种编程语言精确编写的一组命令&#xff09;。使用 LLM&…

ssrf实现.SSH未创建写shell

一、介绍SSRF漏洞 SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求&#xff0c;由服务端发起请求的安全漏洞。一般情况下&#xff0c;SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的&#xff0c;所以服务端能请求到与自身相…

Openvino2024.3版部署YOLO (C++)

在网上很少看到有2024版的openvino&#xff0c;老版本的接口很多也都不在了&#xff0c;此篇写出来也算是为了防止自己忘记。 openvino下载 下载英特尔发行版 OpenVINO 工具套件 (intel.com) 下载好后解压出来&#xff0c;放C盘D盘都一样&#xff0c;我放在D盘了&#xff0c;…

如何解决 Cloudflare | 使用 Puppeteer 和 Node.JS

我认为&#xff0c;现在自动化任务越多&#xff0c;越能体现它们的价值&#xff0c;因此挑战也变得更加明显和困难。例如&#xff0c;Cloudflare 目前提供了强有力的安全措施来保护网站免受所有形式的自动化工具的侵扰。 但对于从事自动化项目&#xff08;如网络爬虫、数据提取…

STM32(七):定时器——输入捕获

IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。 每个高级定时器和通用定时器都拥有4个输…

基于vscode安装EPS-IDF环境与创建例程

安装ESP-IDF 在vscode中安装esp-idf插件 然后打开插件&#xff0c;左侧选择Configure ESP-IDF Extension ![![[Pasted image 20240821221256.png]](https://i-blog.csdnimg.cn/direct/3993e22c37644097b464aef0bbc244a5.png) 点击安装 自动下载ESP-IDF 安装完成&#xff01…

计算机毕业设计推荐- 基于Python的高校岗位招聘数据分析平台

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于Python的高校岗位招聘分…