有关于XML的介绍与运用

XML是一种可扩展标记语言,常用于数据传输、存储和配置文件。它不同于HTML,侧重于传输而非显示数据,允许自定义标签。XML在Java中有多重解析方式,如SAX、DOM、JDOM和DOM4J。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.提出疑问   

2.XML是什么?

3.XML的作用

3.1.网络数据传输.

3.2. 数据存储

3.3. 配置文件

4.语法格式

5.Java有几种XML的解析方式?


 


1.提出疑问   

首先在了解XML和JSON之前我们会有一个疑问,那就是如果要定义一个根类(比如说书籍类),然后在其根类下面插入作为实例存在的子类,然后再定义子类的不同属性与特征,在Java语言中我们要实现此思想就得编译如下代码:

//Java

class Book{

    private String name;

    private String info;

//案例:

    get/set方法
}
public static void main(String[] args) {
    Book b = new Book();

    b.setName(“《小红帽和七个小矮人》”);

    b.setInfo(“他们幸福快乐地生活在一起”);
}

还有一种相较于Java语言比较简化的就是JavaScript,声明一下:Java和JavaScript虽然看起来有点像父产品和衍生子产品的意思,但他们这两种语言是没有任何关系的,仅仅是名字像而已。JavaScript的实现形式如下:

//JavaScript
 
var b = new Object();

    b.name = "《白雪公主和大灰狼》";

    b.info = "大灰狼吃了毒苹果,不治身亡";

虽然明显比Java简化很多,但还是需要new一个对象来实现,看似简单了,实则在数据变多之后还是会出现一些代码的冗杂和对象的混乱的情况,所以接下才会出现XML和JSON等辅助语言来解决这些痛点了。

 

2.XML是什么?

  • XML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 是一种很像HTML的标记语言。(也有开放标签和闭合标签 <> </>)
  • XML 的设计宗旨是传输数据,而不是显示数据,显示数据的是HTML。
  • XML 标签没有被预定义。您需要自行定义标签。(在<>中自定义标签)
  • XML 被设计为具有自我描述性。XML文档可以为自己声明 :<?xml version="1.0" encoding="UTF-8"?> 表示自己的版本是1.0 ,字符编码是UTF-8
  • XML 是 W3C 的推荐标准。

XML并没有什么高深的含义,它仅仅是一个纯文本,有能力处理纯文本的软件都可以处理 XML。并且能够读懂 XML 的应用程序可以有针对性地处理 XML 的标签。而XML的标签是需要自定义的,而不是像HTML一样需要预定义<html></html> ,其标签的功能性意义依赖于应用程序的特性。案例如下:

<?xml version="1.0" encoding="gb2312"?> 
<!--gb2312是适用国内字符的编码名称-->
 
<class>
    <stu id="001">
        <name>大雄</name> 
        <sex>男</sex>
        <age>9</age>
    </stu>  
    <stu id="002">
        <name>静香</name>    
        <sex>女</sex>
        <age>8</age>
    </stu>
</class>

3.XML的作用

3.1.网络数据传输.

可以将XML比作一种大众情人,程序A、程序B互相看不顺眼,谁也不服气谁,但他们都钟爱于XML,因为XML身上有他们都想得到的东西(咳咳),最终程序A 和 程序B 握手言和,并且展开了愉快交流。

3.2. 数据存储

XML文件可以做数据库,程序中如果用到一些经常要人工配置的数据,放在数据库中读取可能会增加维护数据库的工作,这时用XML文件制作一个数据库用来存储这些信息是个不错的点子。

3.3. 配置文件

但前两个作用被后来的JSON运用为多,所以XML文件目前更常用的使用操作还是用来配置文件,如Tomcat服务器的server.xml,web.xml等。

 

4.语法格式

1. XML文档声明
 <?xml version="1.0" encoding="UTF-8"?>
2. 标记 ( 元素 / 标签 / 节点)
XML文档,由一个个的标记组成.
语法:
开始标记(开放标记): <标记名称>
结束标记(闭合标记): </标记名称>
标记名称: 自定义名称,必须遵循以下命名规则:
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格,不能包含冒号(:)
5.名称区分大小写
标记内容: 开始标记与结束标记之间 ,是标记的内容.
例如 ,我们通过标记, 描述一个人名:
<name>大雄</name>

3. 一个XML文档中, 必须有且且仅允许有一个根标记.
正例:
<names>
    <name>大雄</name>
    <name>静香</name>
</names>
反例:
    <name>大雄</name>
    <name>胖虎</name>

4. 标记可以嵌套, 但是不允许交叉.
正例:
<person>
    <name>大雄</name>
    <age>9</age>
</person>
反例:
<person>
    <name>小夫<age></name>9</age>
</person>

5. 标记的层级称呼 (子标记, 父标记 , 兄弟标记, 后代标记 ,祖先标记)
例如:
<persons>
    <person>
        <name>大雄</name>
        <length>140cm</length>
    </person>
<person>
        <name>多啦A梦</name>
        <length>120cm</length>
    </person>
</persons>
<!--name是person的子标记.也是person的后代标记
name是persons的后代标记.
name是length的兄弟标记.
person是name的父标记.
persons是name的祖先标记.-->
6. 标记名称 允许重复
7. 标记除了开始和结束 , 还有属性.
标记中的属性, 在标记开始时 描述, 由属性名和属性值 组成.
格式:
在开始标记中, 描述属性.
可以包含0-n个属性, 每一个属性是一个键值对!
属性名不允许重复 , 键与值之间使用等号连接, 多个属性之间使用空格分割.
属性值 必须被引号引住.
案例:
<persons>
    <person id="10001" groupid="1">
        <name>大雄</name>
        <age>9</age>
    </person>
    <person id="10002" groupid="1">
        <name>静香</name>
        <age>9</age>
    </person>
</persons>
8. 注释
注释不能写在文档文档声明前
注释不能嵌套注释
格式:
注释开始: <!--
注释结束: -->

当你想要在XML中插入一些如"<"、">"、"&"等字符会产生错误,如"<"会被解析器解释为新元素的开始,"&"会被解析器解释为字符实体的开始,在JavaScript中也会大量出现该类字符,容易导致解析错误。

CDATA 是不应该由 XML 解析器解析的文本数据,也就是说CDATA 部分中的所有内容都会被解析器忽略。

方式如下:


<stu id="001">
    <name>蜡笔小新</name> 
    <sex>男</sex>
    <age>3</age>
    <intro><![CDATA[ad<<&$^#*k]]></intro>
</stu>

5.Java有几种XML的解析方式?

Java关于XML的解析方式共有4种,分别是 SAX解析、DOM解析、JDOM解析、DOM4J解析

 

含义

优点

缺点

SAX解析

-解析方式是事件驱动机制!

-SAX解析器,逐行读取XML文件解析,每当解析到一个标签的开始/结束/内容/属性时,触发事件

-我们可以编写程序在这些事件发生时,进行相对应的处理

1.分析能够立即开始,而不是等待所有数据被处理

2.逐行加载,节省内存,有助于解析大于系统内存的文档

3.有时不必解析整个文档,它可以在某个条件得到满足时停止解析

1.单向解析,无法定位文档层次,无法用是访问同一文档的不同部分数据(在解析第n行时,第n-1行已经被释放,无法进行操作)

2.无法得知事件发生时元素的层次,自能维护自己节点的父/子关系

3.只读解析方式,无法修改文档内容

DOM解析

是用与平台和语言无关的方式表示XML文档的官方w3c标准,分析该结构通常需要加载整个文档和内存中建立文档树模型,程序员可以通过操作文档树,来完成数据的获取 修改 删除等

1.文档在内存中加载,允许对数据和结构做出修改

2.访问是双向的,运行在任何时候在树中对数据进行双向解析

文档全部储存在内容中,消耗资源大(日常内容存储是够的,所以这个缺点可以忽略不计,JDOM和DOM4J也是以DOM为基发展出来的)

JDOM解析

目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。

JDOM文档申明其目的“使用20%的精力解决80%的XML/Java问题

1.使用具体类而不是接口,简化的DOM的API

2.大量使用了Java类,方便了Java的开发人员

1.没有较好的灵活性

2.性能不是那么的优异

DOM4J解析

它是JDOM的一种智能分支,他合并了许多超出基本XML的文档表示的功能,包括集成的XPath支持,XMLSchema支持已经用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项。DOM4J是一个非常优秀的Java XML API,具有性能优异,功能强大和极端易用使用的特点。同时它也是开放源代码的软件。如今你快月看到越来越多的Java软件都在使用DOM4J来读取XML文件。目前许多开源项目中都在大量使用DOM4J。

可以说是集大成者 

输出也是学习的过程,希望能够和大家一起成长!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红烧西米露

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值