【JavaWeb】JavaWeb入门之XML详解

目录

1.XML介绍

1.1.XML概述

1.1.1.什么是XML

1.1.2.XML的作用

1.1.3.XML与HTML的比较

1.1.4.XML和properties(属性文件)比较

1.1.5.W3C组织

1.2.XML语法概述

1.2.1.XML文档展示

1.2.2.XML文档的组成部分

1.3.XML文档声明

1.3.1.什么是XML文档声明

1.3.2.XML文档声明结构

1.4.XML元素

1.4.1.XML元素的格式

1.4.2.XML文档的根元素

1.4.3.元素中的空白

1.4.4.元素命名规范

1.4.5.元素属性

1.4.6.注释

1.4.7.转义字符

1.4.8.CDATA段

2.XML解析

2.1.操作XML文档概述

2.1.1.如何操作XML文档

2.1.2.XML解析技术

2.2.DOM4J

2.2.1.DOM4J概述

2.2.1.1.DOM4J是什么

2.2.1.2.DOM4J中的类结构

2.2.1.3.DOM4J获取Document对象

2.2.1.4.DOM4J保存Document对象

2.2.1.5.DOM4J创建Document对象

2.2.2.Document操作

2.2.2.1.遍历students.xml

2.2.3.XPath

2.2.3.1.什么是XPath

2.2.3.2.DOM4J对XPath的支持


1.XML介绍

1.1.XML概述

1.1.1.什么是XML

XML全称Extensible Markup Language,意思是可扩展的标记语言,它是 SGML(标准通用标记语言)的一个子集

1.1.2.XML的作用

  • XML是程序的配置文件

  • 可以在不同语言之间交换数据

  • 作为小型数据库存储数据

1.1.3.XML与HTML的比较

  • HTML的元素是固定的,而XML可以自定义元素

  • HTML用浏览器来解析执行,XML的解析器通常需要自己来写(因为元素是自定义的)

  • HTML只能用来表示网页,而XML的使用场景更多

1.1.4.XML和properties(属性文件)比较

  • properties只能存储平面信息,而XML可以存储结构化信息

  • 解析properties只需要使用Properties类就可以了,而解析XML文件是很复杂的

1.1.5.W3C组织

W3C是万维网联盟(World Wide Web Consortium)英文的缩写,它成立于1994年10月,以开放论坛的方式来促进开发互通技术(包括规格、指南、软件和工具),开发网络的全部潜能。万维网联盟(W3C)从1994年成立以来,已发布了90多份Web技术规范,领导着Web技术向前发展

W3C认为自身不是官方组织,因此将它正式发布的规范称为推荐(建议)标准,意思是进一步标准化的建议,但是由于组织自身的权威性往往成为事实上的标准

1.2.XML语法概述

1.2.1.XML文档展示

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<students>
    <student number="1001">
        <name>zhangSan</name>
        <age>23</age>    
        <sex>male</sex>
    </student>
    <student number="1002">
        <name>liSi</name>
        <age>32</age>
        <sex>female</sex>
    </student>
    <student number="1003">
        <name>wangWu</name>
        <age>55</age>
        <sex>male</sex>
    </student>
</students>

1.2.2.XML文档的组成部分

  • XML文档声明

  • XML处理指令

  • XML元素

  • XML特殊字符和CDATA区 [![CADATA <<<<>>>>>> ]]

  • XML注释 <!--- -->

1.3.XML文档声明

1.3.1.什么是XML文档声明

可以看作是XML文档的说明

最简单的xml文档声明:<?xml version="1.0"?>

1.3.2.XML文档声明结构

  • version属性:用于说明当前xml文档的版本,因为都是在用1.0,所以这个属性值大家都写1.0,version属性是必须的

  • encoding属性:用于说明当前xml文档使用的字符编码集,xml解析器会使用这个编码来解析xml文档。encoding属性是可选的,默认为UTF-8。注意,如果当前xml文档使用的字符编码集是gb2312,而encoding属性的值为UTF-8,那么一定会出错的

  • standalone属性:用于说明当前xml文档是否为独立文档,如果该属性值为yes,表示当前xml文档是独立的,如果为no表示当前xml文档不是独立的,即依赖外部的约束文件,默认是yes

  • 没有xml文档声明的xml文档,不是格式良好的xml文档

  • xml文档声明必须从xml文档的1行1列开始

1.4.XML元素

1.4.1.XML元素的格式

XML元素包含开始标签、元素体(内容)、结束标签。例如:<hello>大家好</hello>

空元素只有开始标签,没有元素体和结束标签,但空元素一定要闭合。例如:<hello/>

XML元素可以包含子元素或文本数据。例如:hello,a元素的元素体内容是b元素,而b元素的元素体内容是文本数据hello

XML元素可以嵌套,但必须是合法嵌套。<b>hello</b>就是错误的嵌套

1.4.2.XML文档的根元素

格式良好的XML文档必须有且仅有一个根元素

student1.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<students>
    <student number="1001">
        <name>zhangSan</name>
        <age>23</age>
        <sex>male</sex>
    </student>
    <student number="1002">
        <name>liSi</name>
        <age>32</age>
        <sex>female</sex>
    </student>
</students>

student2.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<student number="1001">
    <name>zhangSan</name>
    <age>23</age>
    <sex>male</sex>
</student>
<student number="1002">
    <name>liSi</name>
    <age>32</age>
    <sex>female</sex>
</student>

student1.xml是格式良好的xml文档,只有一个根元素,即students元素

student2.xml不是格式良好的xml文档,有两个根元素,即两个student根元素

1.4.3.元素中的空白

XML元素的元素体可以包含文本数据和子元素

a.xml

<a><b>hello</b></a>

b.xml

<a>
    <b>
        hello
    </b>
</a>

a.xml中,<a>元素只有一个子元素,即<b>元素。<b>元素只有一个文本数据,即hello

b.xml中,<a>元素中第一部分为换行缩进,第二部分为<b>元素,第三部分为换行。b元素的文本数据为换行、缩进、hello、换行、缩进

其中换行和缩进都是空白,这些空白是为了增强xml文档的可读性。但xml解析器可能会因为空白出现错误的解读,这说明在将来编写解析xml程序时,一定要小心空白!!!

1.4.4.元素命名规范

XML元素名可以包含字母、数字以及一些其他可见字符,但必须遵循下面的一些规范:

  • 区分大小写:<a>和<A>是两个元素

  • 不能以数字开头:<1a>是错误的命名

  • 最好不要以xml开头:<xml>、<Xml>、<XML>

  • 不能包含空格

1.4.5.元素属性

  • 属性由属性名与属性值构成,中间用等号连接

  • 属性值必须使用引号括起来,单引号或双引号都可以

  • 定义属性必须遵循与标签名相同的命名规范

  • 属性必须定义在元素的开始标签中

  • 一个元素中不能包含相同的属性名

1.4.6.注释

  • 注释以<!--开头,以-->结束

  • 注释中不能包含--

1.4.7.转义字符

因为在xml文档中有些字符是特殊的,不能使用它们作为文本数据。例如:不能使用“<”或“>”等字符作为文本数据,所以需要使用转义字符来表示

例如<a><a></a>,你可能会说,其中第二个<a>是a元素的文本内容,而不是一个元素的开始标签,但xml解析器是不会明白你的意思的。把<a><a></a>修饰为<a><a></a>,这就OK了

转义字符都是以“&”开头,以“;”结束。这与后面我们学习的实体是相同的

1.4.8.CDATA段

当大量的转义字符出现在xml文档中时,会使xml文档的可读性大幅度降低。这时如果使用CDATA段就会好一些

在CDATA段出现的“<”、“>”、“””、“’”、“&”,都无需使用转义字符。这可以提高xml文档的可读性

<a><![CDATA[<a>]]></a>

在CDATA段中不能包含“]]>”,即CDATA段的结束定界符

2.XML解析

2.1.操作XML文档概述

2.1.1.如何操作XML文档

XML文档也是数据的一种,对数据的操作也不外乎是“增删改查”。也被大家称之为“CRUD”

2.1.2.XML解析技术

XML解析方式分为两种:DOM(Document Object Model)和SAX(Simple API for XML)。这两种方式不是针对Java语言来解析XML的技术,而是跨语言的解析方式。例如DOM也在JavaScript中存在

DOM是W3C组织提供的解析XML文档的标准接口,而SAX是社区讨论的产物,是一种事实上的标准

DOM和SAX只是定义了一些接口,以及某些接口的缺省实现,而这个缺省实现只是用空方法来实现接口。一个应用程序如果需要DOM或SAX来访问XML文档,还需要一个实现了DOM或SAX的解析器,也就是说这个解析器需要实现DOM或SAX中定义的接口。提供DOM或SAX中定义的功能

2.2.DOM4J

2.2.1.DOM4J概述

2.2.1.1.DOM4J是什么

DOM4J是针对Java开发人员专门提供的XML文档解析规范,它不同于DOM,但与DOM相似。DOM4J针对Java开发人员而设计,所以对于Java开发人员来说,使用DOM4J要比使用DOM更加方便

DOM4J对DOM和SAX提供了支持,使用DOM4J可以把org.dom4j.document转换成org.w3c.Document,DOM4J也支持基于SAX的事件驱动处理模式

使用者需要注意,DOM4J解析的结果是org.dom4j.Document,而不是org.w3c.Document。DOM4J与DOM一样,只是一组规范(接口与抽象类组成),底层必须要有DOM4J解析器的实现来支持

DOM4J使用JAXP来查找SAX解析器,然后把XML文档解析为org.dom4j.Document对象。它还支持使用org.w3c.Document来转换为org.dom4j.Docment对象

2.2.1.2.DOM4J中的类结构

在DOM4J中,也有Node、Document、Element等接口,结构上与DOM中的接口比较相似。但还是有很多的区别:

在DOM4J中,所有XML组成部分都是一个Node,其中Branch表示可以包含子节点的节点,例如Document和Element都是可以有子节点的,它们都是Branch的子接口

Attribute是属性节点,CharacterData是文本节点,文本节点有三个子接口,分别是CDATA、Text、Comment

2.2.1.3.DOM4J获取Document对象

使用DOM4J来加载XML文档,需要先获取SAXReader对象,然后通过SAXReader对象的read()方法来加载XML文档:

SAXReader reader = new SAXReader();
Document doc = reader.read("src/students.xml");
2.2.1.4.DOM4J保存Document对象

保存Document对象需要使用XMLWriter对象的write()方法来完成,在创建XMLWriter时还可以为其指定XML文档的格式(缩进字符串以及是否换行),这需要使用OutputFormat来指定

doc.addDocType("students", "", "students.dtd");
OutputFormat format = new OutputFormat("\t", true);
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileWriter(xmlName), format);
writer.write(doc);
writer.close();
2.2.1.5.DOM4J创建Document对象

DocumentHelper类有很多的createXXX()方法,用来创建Node对象

Document doc = DocumentHelper.createDocument();

2.2.2.Document操作

2.2.2.1.遍历students.xml

涉及的相关方法:

Element getRootElement():Document的方法,用来获取根元素

List elements():Element的方法,用来获取所有孩子元素

String attributeValue(String name):Element的方法,用来获取指定名字的属性值

Element element(String name):Element的方法,用来获取第一个指定名字的子元素

String elementText(String name):Element的方法,用来获取第一个指定名字的子元素的文本内容

分析步骤:

1.获取Document对象

2.获取root元素

3.获取root所有子元素

4.遍历每个student元素

  • 打印student元素number属性

  • 打印student元素的name子元素内容

  • 打印student元素的age子元素内容

  • 打印student元素的sex子元素内容

2.2.3.XPath

2.2.3.1.什么是XPath

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言

2.2.3.2.DOM4J对XPath的支持

在DOM4J中,Node接口中的三个方法最为常用

  • List selectNodes(String xpathExpression):在当前节点中查找满足XPath表达式的所有子节点;

  • Node selectSingleNode(String xpathExpression):在当前节点中查找满足XPath表达式的第一个子节点;

  • String valueOf(String xpathExpression):在当前节点中查找满足XPath表达式的第一个子节点的文本内容;

Document doc = reader.read(new FileInputStream("person.xml"));
​
Element root = doc.getRootElement();
List<Element> eList = root.selectNodes("/persons");
List<Element> eList1 = root.selectNodes("/persons/person/name");
​
List<Element> eList2 = root.selectNodes("//age");
List<Element> eList3 = root.selectNodes("//person/age");
​
List<Element> eList4 = root.selectNodes("/*/*/address");
List<Element> eList5 = root.selectNodes("//*");
​
List<Element> eList6 = root.selectNodes("/persons/person[1]");
List<Element> eList7 = root.selectNodes("/persons/person[last()]");
​
List<Element> eList8 = root.selectNodes("//@id");
List<Element> eList9 = root.selectNodes("//person[@id]");
List<Element> eList10 = root.selectNodes("//person[@*]");
List<Element> eList11 = root.selectNodes("//*[not(@*)]");
​
List<Element> eList12 = root.selectNodes("//person[@id='person1']");

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Zynq FPGA对雷龙SD NAND的测试

一、SD NAND特征 1.1 SD卡简介 雷龙的SD NAND有很多型号&#xff0c;在测试中使用的是CSNP4GCR01-AMW与CSNP32GCR01-AOW。芯片是基于NAND FLASH和 SD控制器实现的SD卡。具有强大的坏块管理和纠错功能&#xff0c;并且在意外掉电的情况下同样能保证数据的安全。 其特点如下&…

<Project-23 Navigator Portal> Python flask web 网站导航应用 可编辑界面:添加图片、URL、描述、位置移动

目的&#xff1a; 浏览器的地址簿太厚&#xff0c;如下图&#xff1a; 开始&#xff0c;想给每个 Web 应用加 icon 来提高辨识度&#xff0c;发现很麻烦&#xff1a;create image, resize, 还要挑来挑去&#xff0c;重复性地添加代码。再看着这些密密麻麻的含有重复与有规则的…

【Kafka】集成案例:与Spark大数据组件的协同应用

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是kafka 2、Kafka 的主要特性 3、Kafka 的…

Windows上安装专业版IDEA2024并激活

1、IDEA官方下载 搜索IDEA官网点击进入&#xff0c;点击Download&#xff08;目前这个激活脚本只能激活2024.1.7&#xff0c;2024.2.x的版本都不能激活&#xff0c;2024.1.7版本已上传资源&#xff09;&#xff0c;如图&#xff1a; 2、开始安装 1&#xff09;、双击下载的.…

CSS教程(二)- CSS选择器

1. 作用 匹配文档中的某些元素为其应用样式。根据不同需求把不同的标签选出来。 2. 分类 分类 基础选择器 包含 标签选择器、ID选择器、类选择器、通用选择器等 复合选择器 包含 后代选择器、子代选择器、伪类选择器等 1 标签选择器 介绍 又称为元素选择器&#xff0c;根…

Unix进程

文章目录 命令行参数进程终止正常结束异常终止exit和_exitatexit 环境变量环境变量性质环境表shell中操作环境变量查看环境变量设置环境变量 环境变量接口获取环境变量设置环境变量 环境变量的继承性 进程资源shell命令查看进程的资源限制 进程关系进程标识进程组会话控制终端控…

c# onnx 调用yolo v11进行目标检测

先上图&#xff0c;支持图片&#xff0c;视频检测 FormYoloV11.cs using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using System.Diagnostics; usin…

【多语言】每种语言打印helloworld,编译为exe会占多大空间

文章目录 背景c语言 53KBc 53KBgo 1.8Mdart 4.6Mpython未测试nodejs未测试rust未测试java未测试cmd || bash || powershell 未测试other 背景 各个版本的helloworld&#xff0c;纯属闲的, 环境如下: - win10 - mingw: gcc8.1.0 - go1.21 - dart3.5.4c语言 53KB gcc main.c -…

前端搭建低代码平台,微前端如何选型?

目录 背景 一、微前端是什么&#xff1f; 二、三大特性 三、现有微前端解决方案 1、iframe 2、Web Components 3、ESM 4、EMP 5、Fronts 6、无界&#xff08;文档&#xff09; 7、qiankun 四、我们选择的方案 引入qiankun并使用&#xff08;src外层作为主应用&#xff09; 主应…

CVE-2024-2961漏洞的简单学习

简单介绍 PHP利用glibc iconv()中的一个缓冲区溢出漏洞&#xff0c;实现将文件读取提升为任意命令执行漏洞 在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE 漏洞的利用场景 PHP的所有标准文件读取操作都受到了影响&#xff1…

InternVL 多模态模型部署微调实践

目录 0 什么是MLLM 1 开发机创建与使用 2 LMDeploy部署 2.1 环境配置 2.2 LMDeploy基本用法介绍 2.3 网页应用部署体验 3 XTuner微调实践 3.1 环境配置 3.2.配置文件参数解读 3.3 开始微调 4.体验模型美食鉴赏能力 0 什么是MLLM 多模态大语言模型 ( Multimodal Larg…

干货分享之Python爬虫与代理

嗨伙伴们&#xff0c;今天是干货分享哦&#xff0c;可千万不要错过。今天小蝌蚪教大家使用phthon时学会巧妙借用代理ip来更好地完成任务。 让我们先了解一下为什么说咱们要用爬虫代理ip呢&#xff0c;那是因为很多网站为了防止有人过度爬取数据&#xff0c;对自身资源造成损害…

鸿蒙学习生态应用开发能力全景图-赋能套件(1)

文章目录 赋能套件鸿蒙生态应用开发能力全景图 赋能套件 鸿蒙生态白皮书: 全面阐释了鸿蒙生态下应用开发核心理念、关键能力以及创新体验,旨在帮助开发者快速、准确、全面的了解鸿蒙开发套件给开发者提供的能力全景和未来的愿景。 视频课程: 基于真实的开发场景,提供向导式…

netcat工具安装和使用

netcat是一个功能强大的网络实用工具&#xff0c;可以从命令⾏跨⽹络读取和写⼊数据。 netcat是为Nmap项⽬编写的&#xff0c;是⽬前分散的Netcat版本系列的经典。 它旨在成为可靠的后端⼯具&#xff0c;可⽴即为其他应⽤程序和⽤户提供⽹络连接。 一&#xff0c;下载安装 1&a…

【PHP】ThinkPHP基础

下载composer ComposerA Dependency Manager for PHPhttps://getcomposer.org/ 安装composer 查看composer是否安装 composer composer --version 安装 ThinkPHP6 如果你是第一次安装的话&#xff0c;首次安装咱们需要打开控制台&#xff1a; 进入后再通过命令,在命令行下面&a…

【HarmonyOS】应用实现读取剪切板内容(安全控件和自读取)

【HarmonyOS】应用实现读取粘贴板内容(安全控件和自读取) 前言 三方应用 读取系统剪切板是比较常见的功能。可以实现功能入口的快捷激活跳转&#xff0c;以及用户粘贴操作的简化&#xff0c;增强用户的体验感。 但是在用户日渐注重隐私的今天&#xff0c;系统对于剪切板权限的…

飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 本文旨在详细介绍如何在飞牛云NAS上利用Docker部署WordPress&a…

解析安卓镜像包和提取DTB文件的操作日志

概述 想查看一下安卓的镜像包里都存了什么内容 步骤 使用RKDevTool_v3.15对RK3528_DC_HK1_RBOX_K8_Multi_WIFI_13_20230915.2153.img解包 路径: 高级(Advancing) > 固件(firmware) > 解包(unpacking)得到\Output\Android\Image boot.imguboot.imgsuper.img 处理boot.…

LeetCode 热题100(八)【二叉树】(3)

目录 8.11二叉树展开为链表&#xff08;中等&#xff09; 8.12从前序与中序遍历序列构造二叉树&#xff08;中等&#xff09; 8.13路径总和III&#xff08;中等&#xff09; 8.14二叉树的最近公共祖先&#xff08;中等&#xff09; 8.15二叉树中的最大路径和&#xff08;困…

FPGA实现PCIE3.0视频采集转SDI输出,基于XDMA+GS2971架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博已有的 SDI 编解码方案本博客方案的PCIE2.0版本 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存Native视频时序生成RGB转BT1120SDI转HDM…