语法篇--XML数据传输格式

news2024/11/22 10:36:23

一、XML概述

1.1简介

XML,全称为Extensible Markup Language,即可扩展标记语言,是一种用于存储和传输数据的文本格式。它是由W3C(万维网联盟)推荐的标准,广泛应用于各种系统中,如Web服务、数据库、移动应用等。与HTML相比,XML不是用于显示数据的,而是用于存储和传输数据,其语法结构更为严谨,可以支持自定义的标签和属性。

XML的语法规则很简单,由开始标签、结束标签、元素内容和属性组成。开始标签和结束标签使用尖括号括起来,元素内容位于开始标签和结束标签之间,属性则包含在开始标签中。XML文档的根元素是唯一的,所有其他元素都是其子元素。XML还可以使用DTD(文档类型定义)和XML Schema等方式定义文档的结构和内容约束。

由于XML的语法严谨、自定义标签和属性以及可扩展性等特点,使其成为一种流行的数据格式。它在Web服务中广泛应用,如SOAP协议、RESTful Web服务等,也用于配置文件、数据交换、文档传输等场景。

1.2用途

a.程序之间的数据传输通讯
PHP语言<- 快递100 <- Java 语言
b.配置文件config. xml
config. xm1 -> php语言、java语言、Python语言
c.存储数据,充当小型数据库
data. xml

由于XML具有通用性、可扩展性和可读性等特点,因此被广泛用于描述和存储各种类型的数据,如文本、图片、音频、视频、配置文件等。XML还被广泛应用于Web服务、企业应用集成、电子商务、电子出版、数据交换等领域。

1.3什么是XML

XML被发明的目的是传输和存储数据,而不是展示数据;
XML的标签必须自定义,但是在写标签名的时候一定要有含义;

1.4为什么需要XML

 1.5快速入门

1.6扩展技术

1.6.1DTD

1.6.2XSD 

1.6.3XSL

 二、XML的解析

2.1XML的解析方法

2.2Dom处理方法

其处理方式是将XML整个作为类似树结构的方式读入内存中以便操作及解析,方便修改。
解析大数据量的XML文件,会遇到内存泄露及程序崩溃的风险。 

2.3 DOM类解析

2.4DOM读xml文件

package org.example;


import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import java.io.File;

public class Main {
    public static void main(String[] a) {
        recursiveTraverse(); //自上而下进行访问
        System.out.println("========华丽丽的分割线=======");
        traverseBySearch(); //根据名称进行搜索
    }

    public static void recursiveTraverse() {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document document = db.parse(new File("D:\\workspace-java\\untitled4\\users.xml"));

            NodeList usersList = document.getChildNodes();
            for (int i = 0; i < usersList.getLength(); i++) {
                Node users = usersList.item(i);
                NodeList userList = users.getChildNodes();
                for (int j = 0; j < userList.getLength(); j++) {
                    Node user = userList.item(j);
                    if (user.getNodeType() == Node.ELEMENT_NODE) {
                        NodeList metaList = user.getChildNodes();
                        for (int k = 0; k < metaList.getLength(); k++) {
                            Node meta = metaList.item(k);
                            if (meta.getNodeType() == Node.ELEMENT_NODE) {
                                System.out.println(meta.getNodeName()
                                        + ":" + meta.getTextContent());
                            }
                        }
                        System.out.println();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void traverseBySearch() {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document document = db.parse(new File("D:\\workspace-java\\untitled4\\users.xml"));

            org.w3c.dom.Element rootElement = document.getDocumentElement();
            NodeList nodeList = rootElement.getElementsByTagName("name");
            if (nodeList != null) {
                for (int i = 0; i < nodeList.getLength(); i++) {
                    org.w3c.dom.Element element = (org.w3c.dom.Element) nodeList.item(i);
                    System.out.println(element.getNodeName() + " = " + element.getTextContent());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 2.5DOM写xml文件

package org.example;


import org.w3c.dom.Document;
import org.w3c.dom.Element;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;

public class DomWriter {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
            // 新创建一个Document节点
            Document document = dbBuilder.newDocument();

            if (document != null) {
                Element docx = document.createElement("document"); // 创建名为 "document" 的元素
                Element element = document.createElement("element");
                element.setAttribute("type", "paragraph");
                element.setAttribute("alignment", "left"); // 为 element 增加属性
                Element object = document.createElement("object");
                object.setAttribute("type", "text");

                Element text = document.createElement("text");
                text.appendChild(document.createTextNode("abcdefg")); // 为 text 节点赋值
                Element bold = document.createElement("bold");
                bold.appendChild(document.createTextNode("true")); // 为 bold 节点赋值

                object.appendChild(text); // 将 text 节点挂在 object 下
                object.appendChild(bold); // 将 bold 节点挂在 object 下
                element.appendChild(object); // 将 object 节点挂在 element 下
                docx.appendChild(element); // 将 element 节点挂在 docx 下
                document.appendChild(docx); // 将 docx 挂在 document 下

                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                DOMSource source = new DOMSource(document);

                // 定义目标文件
                File file = new File("dom_result.xml");
                StreamResult result = new StreamResult(file);

                // 将 XML 内容写入文件中
                transformer.transform(source, result);
                System.out.println("Write XML file successfully");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.6SAX处理方法

package org.example;


import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class SAXReader {
    public static void main(String[] args) {
        try {
            XMLReader parser = XMLReaderFactory.createXMLReader();
            BookHandler bookHandler = new BookHandler();
            parser.setContentHandler(bookHandler);
            parser.parse("books.xml");
            System.out.println(bookHandler.getNameList());
        } catch (SAXException | IOException e) {
            e.printStackTrace();
        }
    }
}

class BookHandler extends DefaultHandler {
    private List<String> nameList;
    private boolean title = false;

    public List<String> getNameList() {
        return nameList;
    }

    // xml文档加载时
    public void startDocument() {
        System.out.println("Start parsing document...");
        nameList = new ArrayList<>();
    }

    // 文档解析结束
    public void endDocument() {
        System.out.println("End");
    }

    // 访问某一个元素
    public void startElement(String uri, String localName, String qName, Attributes atts) {
        if (qName.equals("title")) {
            title = true;
        }
    }

    // 结束访问元素
    public void endElement(String namespaceURI, String localName, String qName) {
        if (title) {
            title = false;
        }
    }

    // 访问元素正文
    public void characters(char[] ch, int start, int length) {
        if (title) {
            String bookTitle = new String(ch, start, length).trim();
            if (!bookTitle.isEmpty()) {
                System.out.println("Book title: " + bookTitle);
                nameList.add(bookTitle);
            }
        }
    }
}

2.7STAX处理方法

2.8其他第三方库

 

 

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

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

相关文章

Handler机制(二)

在上一篇文章中&#xff0c;我们分析了Handler基本流程&#xff0c;下面分析一些上层开发很少接触的部分。 IdleHandler 从命名可以看出IdleHandler 是Handler出现空闲时的一种机制&#xff0c;IdleHandler是一种只有当消息队列没有消息时或者当前队列中的消息还没有到执行时…

linux 上安装es

首先 到官网 https://www.elastic.co/cn/downloads/elasticsearch 下载对应的安装包&#xff0c;我这里下载的是 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.1-linux-x86_64.tar.gz 然后讲该压缩包上传到 linux 的/usr/local 目录下执行 tar -z…

Go语言入门指南:基础语法和常用特性解析(上)

一、Go语言前言 Go是一种静态类型的编译语言&#xff0c;常常被称作是21世纪的C语言。Go语言是一个开源项目&#xff0c;可以免费获取编译器、库、配套工具的源代码&#xff0c;也是高性能服务器和应用程序的热门选择。 Go语言可以运行在类UNIX系统——比如Linux、OpenBSD、M…

基于ChatYuan-large-v2 微调训练 医疗问答 任务

一、ChatYuan-large-v2 上篇基于ChatYuan-large-v2 语言模型 Fine-tuning 微调训练了广告生成任务&#xff0c;总体生成效果还可以&#xff0c;但上篇文章的训练是微调的模型全部的参数&#xff0c;本篇文章还是以 ChatYuan-large-v2 作为基础模型&#xff0c;继续探索仅训练解…

【100天精通python】Day38:GUI界面编程_PyQt 从入门到实战(中)_数据库操作与多线程编程

目录 专栏导读 4 数据库操作 4.1 连接数据库 4.2 执行 SQL 查询和更新&#xff1a; 4.3 使用模型和视图显示数据 5 多线程编程 5.1 多线程编程的概念和优势 5.2 在 PyQt 中使用多线程 5.3 处理多线程间的同步和通信问题 5.3.1 信号槽机制 5.3.2 线程安全的数据访问 Q…

Spring Boot整合RabbitMQ之发布与订阅模式

RabbitMQ的模式中&#xff0c;常用的模式有&#xff1a;简单模式&#xff0c;发布与订阅模式&#xff0c;工作模式&#xff0c;路由模式&#xff0c;主题模式。简单模式不太会运用到工作中&#xff0c;我们可以使用 RabbitMQ 的发布订阅模式&#xff0c;实现&#xff1a; 用户…

KUST_LI计算机视觉实验室服务器安装与管理

第一步&#xff1a;安装 Linux-Ubuntu系统 系统语言设置为英文 ENGLISH&#xff0c;防止系统 BUG&#xff1b;选择-清除整个磁盘并安装系统&#xff1b;设置用户名和密码&#xff0c;实验室统一其余全部默认设置 开机后设置磁盘挂载 在系统设置中找到 desk 打开&#xff0c;…

YOLOv7训练结果解析

前言&#xff1a; 已训练完模型&#xff0c;且把结果下载下来&#xff0c;以下某一次id识别训练结果为例&#xff0c;如下图所示。 注&#xff1a;YOLOv7每次train完成&#xff08;如果没有中途退出&#xff09;都会在run目录下生成expX目录&#xff08;X代表生成结果次数 第一…

CentOS7.9手工配置静态网络流程

进入网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 配置 TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"static" //static 配置静态网络 DEFROUTE"yes" IPV4_FAILURE_FATAL"no…

电脑找不到MSVCR120.dll怎么办,三个完美解决方法

在计算机领域&#xff0c;MSVCR120.dll是一个非常重要的动态链接库文件。它是Microsoft Visual C 2010 Redistributable Package的一部分&#xff0c;用于支持某些程序的运行。然而&#xff0c;在某些情况下&#xff0c;我们可能会遇到MSVCR120.dll丢失的问题。在这篇文章中&am…

(详解踩坑)GIT版本回滚git stash、git reset、git reset --hard、git revert

目录 背景 一、&#xff08;git log、git reflog&#xff09;查看git提交日志及命令历史 1.1 git log&#xff08;提交日志&#xff09; 1.2 git reflog&#xff08;命令历史&#xff09; 二、git reset&#xff08;回退到指定的版本&#xff0c;并且保留更改&#xff09; …

LEADTOOLS Imaging SDK Crack

LEADTOOLS Imaging SDK Crack 高级开发人员工具包包括ActiveX和WPF/XAML控件。 LEADTOOLS Imaging SDK为文件格式导入/导出、图像压缩、图像显示和效果、颜色转换、图像处理、TWAIN扫描、图像通用对话框、数据库集成、打印和互联网提供了基本和高级的彩色图像功能。 LEADTOOLS …

【数据分享】2013-2023年全国370个城市逐月空气质量数据(Excel格式/无需转发)

空气质量的好坏反映了空气污染程度&#xff0c;它是依据空气中污染物浓度的高低来判断的。在各项涉及城市环境的研究与实际项目中&#xff0c;城市空气质量都是一个十分重要的指标。那么&#xff0c;去哪里能获取到各城市空气质量的历史数据呢&#xff1f; 之前我们分享了2014…

前端vue自定义柱形图 选中更改柱形图颜色及文字标注颜色

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

Dubbo高手之路3,Dubbo服务消费详解

目录 引言1. 介绍 Dubbo 服务消费的详解的目的和背景2. 概述 Dubbo 服务消费的过程和核心概念 一、Dubbo 服务消费的基础知识1. Dubbo 服务消费的架构和流程2. Dubbo 服务消费的基本配置和使用方法 二、Dubbo 服务消费的注册与发现1. Dubbo 服务消费的注册中心和发布中心的基本…

09_Redlock算法和底层源码分析

Redlock算法和底层源码分析 一、当前代码为8.0版接上一步 自研分布式锁的重点&#xff1a; 按照juc里面Lock接口规范进行编写lock加锁关键逻辑 加锁&#xff1a;在redis中&#xff0c;加锁实际上是给key设置一个值&#xff0c;为避免死锁&#xff0c;并给key一个过期时间自旋…

01.Django入门

1.创建项目 1.1基于终端创建Django项目 打开终端进入文件路径&#xff08;打算将项目放在哪个目录&#xff0c;就进入哪个目录&#xff09; E:\learning\python\Django 执行命令创建项目 F:\Anaconda3\envs\pythonWeb\Scripts\django-admin.exe&#xff08;Django-admin.exe所…

protobuf+netty自定义编码解码

protobufnetty自定义编 项目背景 protobufnetty自定义编码解码 比如心跳协议&#xff0c;客户端请求的协议是10001&#xff0c;在java端如何解码&#xff0c;心跳返回协议如何编码&#xff0c;将协议号带过去 // 心跳包 //10001 message c2s_heartbeat { }//10002 message …

【数据分享】2006-2021年我国省份级别的市政公用设施建设固定资产投资相关指标(30多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况&#xff0c;在之前的文章中&#xff0c;我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国省份级别的市政设施水平相关指标、2006-2021年我国省份级别的各类建设用地面积数…