Java web基础总结之一——xml基础

Java web基础总结之一——xml基础

要学习java web,掌握xml语言是必要的,可以说,在一个java web项目中,xml配置文件无处不在。首先每个java web项目都会有一个web.xml的配置文件。而在各种各样的框架中,xml配置文件更是必不可少。当然,虽然有些框架可以使用注解来实现零配置。但是一般还是习惯于使用配置文件,可以和代码解耦和。

一.Xml基础知识以及语法规范

 那首先的问题是,什么是xml?它主要用来做什么?

       Xml是Extensible Markup Language的缩写,就是可扩展标记语言。W3C组织于2000发布了XML1.0规范。当时据说是为了替代html语言,现在看来是没有实现。

   XML语言的作用是描述有关系的数据。在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。比如:

<?xml version="1.0" encoding="UTF-8"?>

<大学专业>

    <文科>

             <历史></历史>

             <法律></法律>

    </文科>

    <理科>

             <化学></化学>

             <物理></物理>

    </理科>

</大学专业>

 下面了解一下xml的语法

一个完整的xml文件会包括以下几个部分:文档声明 ,元素,属性,注释 ,CDATA及转义字符 ,处理指令。

1.      文档声明

在编写XML文档时,最开头要进行文档声明,声明XML文档的类型,下面是两个例子。

最简单的声明语法:

      <?xmlversion="1.0" ?>

用encoding属性说明文档的字符编码:

      <?xmlversion="1.0" encoding="GB2312" ?> 

2.      元素

XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:

包含标签体:<大学专业> xx</大学专业>

不含标签体的:<大学专业> </大学专业>, 可以简写为:<大学专业/>

元素的语法规范

       XML的合法的元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:大小写敏感的,例如,<A>和<a>是完全不一样的。不能以数字或"_" (下划线)开头。不能以xml(或XML、或Xml 等)开头。不能包含空格。而且中间不能包含冒号。

    *有几个需要注意的问题:

(1).一个标签中也可以嵌套若干子标签。绝对不能交叉嵌套,比如:

            <历史>aa<物理>xx</历史></物理>

(2).通常XML文档必须有且仅有一个根标签,其它标签都是这个根标签的子孙标签。

(3).和java代码不同的是,对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。举个例子,下面的两个完全不同。

例1:

      <大学专业> xx</大学专业>

例2:

      <大学专业> xx

</大学专业>

  3.      属性

一个标签可以有一个或者多个的属性,属性有名字和值,例如:

              <importresource="spring-dao.xml"/>

在XML中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:

              < import>

                      < resource > spring-dao.xml</ resource >

              </ import>

同时也要注意一些细节,属性值必须要用双引号(")或单引号(')引起来,属性的命名规范和标签一样。

4.      注释

Xml中也可以写一些注释,文件中的注释的格式是:“<!--注释内容-->”。需要注意几个细节,一个是注释不能有嵌套,还有就是和java代码不一样的是,注释不能写在开头,即在xml声明的前面。

5.      CDATA区域和转义字符

当我们编写XML文件时,可能会有这种需求,就是有些内容不想让解析引擎解析执行,而是当作原始内容处理,这时可以有两种情况。

(1). 对于任意的字符,可以使用CDATA区,对于CDATA区域内的内容,XML解析程序不会处理,而是直接输出,不做任何的解析。语法是:<![CDATA[ 内容 ]]>

(2). 对于一些单个字符,由于是xml中的有意义的字符,若想显示其原始样式,就可以使用转义的形式予以处理。下面是常见的转义字符表:

​​​​

6.      处理指令

   处理指令,简称PI (processinginstruction)。处理指令用来指挥解析引擎如何解析XML文档内容。处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。

二.XML的约束

所谓的xml约束,就是约束一个XML文档的书写规范的一个约束文档,这称之为XML约束。例如spring中的约束文件:

      xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

      http://www.springframework.org/schema/context

      http://www.springframework.org/schema/context/spring-context-3.1.xsd"


常见的有XML DTD 和XML Schema两种约束

1.      XML DTD约束

  DTD(Document Type Definition),全称为文档类型定义。使用一个以 .dtd 为后缀的约束文件。DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。具体的语法这里就不详细讨论了。

2.       XML Schema约束

XML Schema 是另一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性。Schema约束与dtd约束最大的区别在于Schema约束文档本身也是一个符合xml语法的xml文件。它的功能更强大,更复杂,现在已是w3c组织的标准,它正逐步取代DTD成为标准的xml约束,常见的是以.xsd为后缀的文件,如上面例子中的spring的约束文件。

三.XML文件的解析

       Java中有很多的第三方的解析xml文件的类库,可以避免我们重复造轮子,而去直接使用。

XML解析方式分为两种:dom和sax。dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。sax: (Simple APIfor XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。XML解析器(apache)主要有:Crimson(sun1.4)、Xerces(IBM 1.5) 、Aelfred2(DOM4J)。XML解析开发包(对解析封装后开发的API)主要有Jaxp(使用Crimson(sun1.4)、Xerces(IBM 1.5) )、Jdom、Dom4j(Aelfred2(DOM4J))。

DOM解析和SAX解析的区别是在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构架代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。

         SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。所以相对更加的灵活。对于xml解析的具体操作,可以查看相应的xml解析器的API文档进行学习。这篇文章只是简单的介绍,就不多说了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容