XML文件详解 (java程序解析XML文件,java程序写XML文件)

news2024/11/16 10:24:19

XML 的全称是可扩展标记语言(eXtensible Markup Language)

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

使用XML(可扩展标记语言)有以下几个好处:

可读性强:XML使用标记来定义数据,使得数据具有更好的可读性和可维护性。它采用了层次结构的形式,可以清晰地描述数据的结构,易于理解和解释。

跨平台和语言无关性:XML是一种通用的标记语言,不依赖于具体的编程语言或操作系统。这意味着XML文件可以在不同平台和系统上使用,并且可以被各种编程语言解析和处理。

可扩展性:XML具有良好的扩展性,可以根据需要自定义标记和结构。这使得XML非常适合用于描述复杂的数据或配置文件。

数据与显示的分离:使用XML可以将数据与其呈现方式(如HTML、XSL等)进行分离。这样,数据可以独立于其呈现方式进行管理和更新,使得应用程序更加可灵活和可扩展。

数据交换和集成:XML广泛用于数据交换和集成领域。由于XML的普遍性和通用性,可以轻松地在不同系统和应用程序之间传输和共享数据,促进系统间的互操作性。

应用场景:用来作为系统的配置文件,也可以作为在网络中传输的数据格式。

xml的特点:

  1. xml中的<标签名>被称为一个标签或者是一个元素,一般是成对出现的。
  2. xml中的标签名是可以自己定义的。
  3. xml中只能由一个根标签。
  4. xml中的标签可以有属性。
  5. 如果一个文件中存放的是xml格式的数据,那么文件后缀一定是".xml"。
    在这里插入图片描述

xml中的一些语法规则

  1. xml文件后缀必须是xml

  2. 文档声明必须是第一行: <?xml version="1.0" encoding="UTF-8" ?>
    version:xml的默认版本号码。
    encoding:本xml文件的编码。

  3. 在 XML 中,有五个特殊字符需要进行转义(即使用实体引用)才能正确表示:

符号替代
小于号 <&lt; 表示
大于号 >&gt; 表示
引号 "&quot; 表示
单引号 ’&apos; 表示
和号 &&amp; 表示

也可以使用CDATA的数据区:<![CDATA[ 内容 ]] >,使用了它就可以在其中随便写。
在这里插入图片描述
在这里插入图片描述

解析xml文件

在这里插入图片描述
创建mevan项目引入dom4j依赖:

 <dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>

dom4j如何解析xml文档:
首先dom4j提供了一个 SAXReader解析器 把整个xml文件解析为一个Document文档,然后在解析为Element:元素(标签),最后解析标签的 Attribute:属性子标签,文本

在这里插入图片描述

  1. 创建一个SAXReader解析对象。
SAXReader saxReader = new SAXReader();

在这里插入图片描述

  1. 使用后SAXReader对象将要读取的xml解析为一个Document文档。
Document document = saxReader.read("src/main/resources/user.xml");
  1. 从文档对象中解析xml的数据。
Element rootElement = document.getRootElement();

在这里插入图片描述

4.使用Element对象提供的方法进行解析数据。
在这里插入图片描述
示范:
这是我的xml文件内容:

<?xml version="1.0" encoding="UTF-8" ?>
<users>
    <user id="1">
        <name>张三</name>
        <age>12</age>
        <sex></sex>
        <username>zhangsan</username>
        <password>123456</password>
    </user>
    <user id="2">
        <name>里斯</name>
        <age>13</age>
        <sex></sex>
        <username>lisi</username>
        <password>1234567890</password>
    </user>
</users>

我解析的代码:

package com.pjh;

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

import java.util.List;

public class test {
    public static void main(String[] args) throws Exception {
        //创建一个SAXReader解析对象。
        SAXReader saxReader = new SAXReader();
        //使用后SAXReader对象将要读取的xml解析为一个Document文档。
        Document document = saxReader.read("src/main/resources/user.xml");
        //从文档对象中解析xml的数据
        Element rootElement = document.getRootElement();
        System.out.println(rootElement.getName());

        List<Element> elements = rootElement.elements();
        for (Element e: elements){
            System.out.println(e.getName());
            System.out.println("id:"+e.attribute("id").getValue());

            List<Element> elements1 = e.elements();
            for (Element e1 : elements1){
                System.out.println(" "+e1.getName() +":"+e1.getTextTrim());
            }
        }
    }
}

打印结果:
在这里插入图片描述

如何使用程序把数据写到xml中去?

在这里插入图片描述
使用字符串拼接直接把数据拼成xml的格式再通过io流写入到xml文档中。
如下代码:

package com.pjh;

import java.io.FileWriter;

public class test2 {
    public static void main(String[] args) {
        StringBuilder str = new StringBuilder();
        str.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
        str.append("<users>\n");
        str.append("    <user id=\"1\">\n");
        str.append("        <age>12</age>\n");
        str.append("        <name>张三</name>\n");
        str.append("    </user>\n");
        str.append("</users>");
        try (FileWriter fileWriter =
                     new FileWriter("src/main/resources/user2.xml")) {
            fileWriter.write(str.toString());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

结果:
在这里插入图片描述

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

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

相关文章

微信小程序 获取当前屏幕的可见高宽度

很多时候我们做一下逻辑 需要用整个窗口的高度或宽度参与计算 而且很多时候我们js中拿到的单位都是px像素点 没办法和rpx同流合污 官方提供了wx.getSystemInfoSync() 可以获取到部分窗口信息 其中就包括了整个窗口的宽度和高度 wx.getSystemInfoSync().windowHeight 返回值为像…

ElasticSearch 安装,保存,查询,更新,复杂查询,模糊查询,高亮查询

ElasticSearch ik分词器&#xff1a; ik分词器的安装&#xff0c;将ik分词器下载并解压&#xff0c;新建文件夹ik&#xff0c;将解压内容放进ik文件夹中&#xff0c;将ik文件夹放在es安装路径的plugin文件夹中 GET _analyze {"analyzer": "ik_smart",&q…

C++对string进行大小写转换的三种方法

C对string进行大小写转换的三种方法 方法一&#xff1a;下标 #include <iostream> #include <string> using namespace std;int main() {string s "ABCDEFG";for( int i 0; i < s.size(); i ){s[i] tolower(s[i]);}cout<<s<<endl;re…

详细解说iptables 高阶用法,用来完成哪些高效率网络路由策略场景,iptables 实现域名过滤,Linux如何利用iptables屏蔽某些域名?

详细解说iptables 高阶用法,用来完成哪些高效率网络路由策略场景,iptables 实现域名过滤,Linux如何利用iptables屏蔽某些域名? Linux利用iptables屏蔽某些域名 以下规则是屏蔽以 youtube.com 为主的所有一级 二级 三级等域名。 iptables -A OUTPUT -m string --string &qu…

XLSX.utils.sheet_to_json()解析excel,给空的单元格赋值为空字符串

前言 今天用到XLSX来解析excel文件&#xff0c;调用XLSX.utils.sheet_to_json(worksheet)&#xff0c;发现如果单元格为空的话&#xff0c;解析出来的结果&#xff0c;就会缺少相应的key&#xff08;如图所示&#xff09;。但是我想要单元格为空的话&#xff0c;值就默认给空字…

layui tree监控选中事件,同步选中和取消

需求&#xff1a;需要分配权限时&#xff0c;要通过组织架构分配&#xff0c;也要通过角色分配&#xff0c;还是把选择的结果显示出来 结果如下图 代码分页面&#xff0c;类和SQL 页面&#xff1a; <% Page Language"C#" AutoEventWireup"true" Code…

ElasticSearch搜索引擎: 内存分析与设置

在 Elasticsearch 的运行过程中&#xff0c;如何合理分配与设置内存是一件十分重要的事情&#xff0c;否则十分容易出现各种问题。 一、Elasticsearch为什么吃内存&#xff1a; 我们先看下 ES 服务器的总体内存消耗情况&#xff1a; 对于Query Cache、Request Cache、Field…

IT和OT 之间的教育鸿沟

自动化行业正在大力倡导开放自动化系统&#xff0c;使更多IT技术能够导入传统的自动控制行业。并且提出让开放自动化系统消除IT和OT 之间的鸿沟。笔者看来&#xff0c;IT和OT 之间除了技术上的鸿沟之外&#xff0c;还存在着人才鸿沟。近年来&#xff0c;面向智能制造行业的软件…

生物制药公司【Lexeo Therapeutics】申请1亿美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;生物制药公司【Lexeo Therapeutics】近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为(LXEO),Lexeo Therapeutics计划…

万万没想到有一天居然可以在 Mac 上玩游戏,而且还是原神!

万万没想到有一天居然可以在 Mac 上玩游戏&#xff0c;而且还是原神&#xff0c;我真的哭死~ 是这样的&#xff0c;我以前一直用 Mac 来办公也没想过要打游戏&#xff0c;在我心中 Mac 就是用来办公的&#xff0c;生产力工具&#xff0c;直到有一天我刷到一个视频&#xff0c;…

开发餐饮类私域流量是开发应用APP还是小程序还是低代码跨平台APP分析他的利与弊

在开发餐饮类应用程序时&#xff0c;我们需要先了解市场需求&#xff0c;定义目标受众&#xff0c;并提供独特的功能。个人感觉我们提供周围的在线订购、外卖服务、用户评价等功能&#xff0c;以吸引用户。同时&#xff0c;设计用户习惯的界面&#xff0c;使用户轻松选择自己的…

Qt绘图系统

文章目录 一.Qt绘图系统简介二.支持绘图系统的类三.绘图后端四.绘图和填充绘图填充Qt::BrushStyle 五.坐标系系统 一.Qt绘图系统简介 Qt的绘画系统支持使用相同的API在屏幕和打印设备上进行绘画&#xff0c;并且主要基于QPainter、QPaintDevice和QPaintEngine类。这种方法的主…

充电100%并非都是美事,有时少点更有溢出!如何正确为iPhone充电

iPhone是非凡的设备&#xff0c;但一旦电池耗尽&#xff0c;它们就会失去光泽。这就是为什么照看电池内部并确保始终正确充电很重要。 在这篇文章中&#xff0c;我们解释了如果你想让你的iPhone每天运行到深夜&#xff0c;并尽可能多地保持这种状态&#xff0c;你需要采取的步…

灰豚数字人平台AI创作助手,一键成片简化短视频制作过程,创作量突破百万!

国内AI语言大模型越来越多&#xff0c;人工智能已经全面进入我们的日常生活。其中&#xff0c;灰豚AI数字人平台的AI一键成片技术以其特独优势必&#xff0c;越来越受到短视频创作的青睐。本文将详细介绍灰豚AI数字人平台的应用场景以未来的发展前景。 灰豚数字人官网 一、灰豚…

Vue中使用Echarts封装为公用组件(简单复制粘贴)

Vue中封装Echarts组件 前提直奔主题 本文以Vue3代码演示 Vue2同理 前提 中文官网&#xff1a; https://echarts.apache.org/zh/index.html npm安装Echarts npm install echarts or pnpm install echarts or yarn add echarts直奔主题 创建Echarts.vue文件&#xff0c;代码如…

【Java每日一题】— —第二十六题:编程定义一个经理类Manager。(2023.10.10)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【Java】Java中的零拷贝

物理内存 计算机物理内存条的容量&#xff0c;比如我们买电脑会关注内存大小有多少G&#xff0c;这个容量就是计算机的物理内存。 虚拟内存 操作系统为每个进程分配了独立的虚拟地址空间&#xff0c;也就是虚拟内存&#xff0c;虚拟地址空间又分为用户空间和内核空间&#x…

[网鼎杯 2018]Comment git泄露 / 恢复 二次注入 bash_history文件查看

首先我们看到账号密码有提示了 我们bp爆破一下 我首先对数字爆破 因为全字符的话太多了 爆出来了哦 所以账号密码也出来了 zhangwei zhangwei666 没有什么用啊 扫一下吧 有git git泄露 那泄露看看 真有 <?php include "mysql.php"; session_start(); if(…

JUC第二十一讲:JUC线程池:ScheduledThreadPoolExecutor详解

JUC线程池&#xff1a;ScheduledThreadPoolExecutor详解 本文是JUC第二十一讲&#xff0c;JUC线程池: ScheduledThreadPoolExecutor详解。在很多业务场景中&#xff0c;我们可能需要周期性的运行某项任务来获取结果&#xff0c;比如周期数据统计&#xff0c;定时发送数据等。在…

07_项目开发_用户信息列表

1 用户信息列表内容展示 用户信息列表&#xff0c;主要完成用户信息的添加、删除、修改和查找功能。 用户列表页面效果&#xff1a; 单击“添加用户”按钮&#xff0c;进入添加用户页面。 填写正确的信息后&#xff0c;单击“添加用户”按钮&#xff0c;会直接跳转到用户列表…