我对于XML是很不够重视的,认识也是非常肤浅的,因为在之前的Web经验中,基本上都可以使用JSON来代替XML,JSON网络流量少,解析快,JS支持好等这些特点让我对自己的观点坚信不疑。然而我渐渐地改变了这些观点,最近写了一个基于Spring的服务配置体系,主要思想是将一些常用的服务封装成服务类,预留一些参数接口,然后通过Spring注入这些参数以及服务类之间的各种关系,实现业务逻辑配置化,尽最大可能地实现代码复用、易于维护等,在实际开发以及运用时,Spring配置文件变得越来越大,于是产生了能否将服务配置剥离出来单独管理的想法,但是这个想法一开始就遭遇了非常大的挫折——这源于我在XML领域的无知。于是想,不如趁这个机会,补一补XML的知识吧!

1、XML概述

(1)XML全称是Extensible Markup Language,即可扩展标记语言,从名称上看,首先XML是一种标记语言,比较简单,不同于C、Java这样的编程语言,其次XML这种标记语言是可扩展的,不同于HTML(Hypertext Markup Language,超文本标记语言)内置了大量的标签,HTML不具备可扩展性,数据逻辑与表现逻辑混在一起,而XML可以自由扩展,只负责存储数据,不管数据是怎么显示的。

(2)XML可以分为三类:

A:不符合格式的XML文档(malformed):实际上这已经不是XML文档了,因为没有遵守最基本的XML文档规则。

B:符合格式的XML文档(well-formed):遵守了XML文档的基本规则,但是没有使用DTD或Schema等语义约束,或者使用了DTD或Schema语义约束然而文档并没有完全遵守相应的语义约束。

C:有效的XML文档(valid):遵守了XML文档的基本规则,并且使用DTD或Schema语义约束同时完全遵守了这些语义约束。

这里XML文档的分类基于“XML文档的基本规则“,那么这些基本规则有哪些?

(3)XML文档的基本规则

A:有且仅有一个根元素

B:元素必须有相应的结束标签

C:元素之间必须正确嵌套,不要你中有我,我中有你,分不清谁主谁次

D:元素的属性必须有值,值使用单引号或双引号括起来,也就是说元素的属性后面必须要有单引号或双引号,至于引号里面的内容那就不管了,多个属性之间的顺序也是随意的

符合基本规则的XML文档都能转化成一个树形结构。

当然,XML文档的基本规则题中应有之义就包括了元素名称、属性名称这些也是合法的标识符了。

2、XML声明

我们常常可以看到,在XML文档的第一行往往是类似于下面的文本,这个文本称之为XML声明。

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

(1)XML声明以<?xml开始,以?>结束。

(2)XML声明中的版本属性version是必须的,通常为1.0,表示这个文档遵守XML 1.0标准。

(3)字符集属性encoding是可选的,默认值是UTF-8。

(4)属性standlone也是可选的,表示是否需要引用其他资源,值只能是yes或no

3、标签名

(1)标签名称是区分大小写的,name和Name表示两个标签名

(2)标签名可以由字母(可以是中文)、数字、下划线、中划线、冒号和点号组成,但不能以数字、中划线和点号开头

(3)标签名不能包括<、>、,、$、空格等特殊符号,也不要以xml(或xml任意大小组合)开头

(4)尽量不要出现英文冒号,除非是使用命名空间

关于标签名称,类似于其它语言中的变量名,无需太在意,一般也不至于出错,除非你要想方设法的去验证XML工具的正确性。

4、实体引用

在XML文档中,因为标签是使用尖括号括起来的,所以尖括号在XML文档内容中就有了特殊的意思了,不想麻烦的话最好就使用实体引用来表示这些特殊符号了(类似于其它语言中的转义,将特殊符号的含义转义为符号表示的字符本身),内置的实体引用有5个,当然,你也可以自定义实体引用——这是后话:

实体引用 所代表的符号 说明
&lt; < 小于符号
&gt; > 大于符号
&amp; & and符号
&apos; ' 英文单引号
&quot; " 英文双引号

这种格式是不是很熟悉?和HTML中的差不多,以”&“开头,以";"结尾,只不过HTML内置的实体引用要多一些。

如果标签内容有很多实体引用,那将会是非常不雅观的,在XML中,还可以使用CDATA标记来标记一整段内容,使其中的内容都完全忠实于符号本身,格式如下:

<![CDATA[这里的内容都将忠实于字符本身]]

看个例子:

<?xml version="1.0" encoding="UTF-8" standlone="no"?>
<root>
<!--CDATA区域示例-->
<![CDATA[
<name>
别看这里<name>貌似元素标签名,实际只表示"<name>"这段文本而已
</name>
]]>
</root>

你已经看到了,里面的<!-- ... -->表示注释,关于注释,不要:

(1)不要放在标签内部,否则,它将破坏XML文档的结构

(2)不要把注释放在XML声明之前,XML声明永远放在文档的第一行

(3)不要在注释中间使用 -- ,这会混淆的,自然,注释的内容也不要以 -->结尾了

5、处理指令

XML还提供了称之为处理指令的语法,用来告诉处理程序怎么处理,开发者可以定义任意的处理指令,并关联合适的程序来解析该指令

XML处理指令的格式为:

<?处理指令名 处理指令信息?>

从形式上看,可以把XML声明看作指令名为xml的处理指令。另外一个常见的处理指令是xml-stylesheet,用于为XML文档导入样式表(如css样式表、xsl样式表)。如:

<?xml version="1.0" encoding="UTF-8" standlone="no"?>
<?xml-stylesheet type="text/css" href="public.css"?>
<?xml-stylesheet type="text/xsl" href="public.xsl"?>
<root>
</root>

XML学习笔记1——概述的更多相关文章

  1. XML学习笔记

    XML学习笔记 第一部分:XML简介 我们经常可以听到XML.HTML.XHTML这些语言,后两者比较清楚,一直不是很明白XML是什么,这里做一个总结. XML(eXtensible Markup L ...

  2. delphi操作xml学习笔记 之一 入门必读

    Delphi 对XML的支持---TXMLDocument类       Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写.可以利用TXMLDocum ...

  3. XML学习笔记(1)--XML概述

    XML基本概念 XML—extensible Markup Language(可扩展标记语言) XML最基本的三个概念 1)XML语言---描述事物本身(可扩展) 2)XSL语言---展现事物表现形式 ...

  4. XML学习笔记(四)-- 修饰XML文档的CSS

    标签(空格分隔): 学习笔记 XML为存储结构化数据提供了强大的方法,但是它没有提供关于数据如何显示地信息,(数据的结构与数据表示无关).可以使用CSS来控制XML文档中各元素的呈现方式. CSS语法 ...

  5. XML学习笔记(三) -- Schema

    标签(空格分隔): 学习笔记 Schema的格式 XML Schema文档是由元素.属性.命名空间和XML文档中的其他节点构成的. XML Schema有两种重要的Schema模型:Microsoft ...

  6. XML学习笔记(二)-- DTD格式规范

    标签(空格分隔): 学习笔记 XML的一个主要目的是允许应用程序之间自由交换结构化的数据,因此要求XML文档具有一致的结构.业务逻辑和规则.可以定义一种模式来定义XML文档的结构,并借此验证XML文档 ...

  7. XML学习笔记之XML的简介

    最近,自学了一段时间xml,希望通过学习笔记的整理能够巩固一下知识点,也希望把知识分享给你们(描红字段为重点): XML(extensible Markup language):可扩展的标记语言,解决 ...

  8. Python之xml学习笔记

    XML处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过&l ...

  9. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

随机推荐

  1. 高等微积分及其应用 nicholas.pdf——下载地址

    http://pan.baidu.com/share/link?shareid=426414429&uk=3977204074 这本书在网络上很少有了,本人是在群里下过来整理成一个文档了,由n ...

  2. lockfree

    为什么要lockfree 按我的理解, lockfree就是不去 调用操作系统给定的锁机制. 1. 会有system call,  and system call is expensive; 比如pt ...

  3. SAS实验室之PROC TRANSPOSE

    首先,抛开SAS,回忆我们在数学课本上学习的转置是什么概念,转置如下图: 以上就是数学中的转置. 那么在SAS里该如何转置呢? 先看语法格式: PROC TRANSPOSE <DATA=inpu ...

  4. 积木大赛 noip2013提高组day2

    这道题一开始想到处理中间是0的位置,但这样时间太慢了,后来想到一种类似二分的方法,就是把这一段的最小值找到,全部减去最小值,然后有0一出现,就又递归处理前一段,每次答案就加上这一段的最小值: AC代码 ...

  5. 编译器错误信息: CS0433: 类型“ASP.usercontrols_total_ascx”同时存在

    “/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误信息: CS0433: 类型“ASP.use ...

  6. Introduction ch3

    [1] Don’t reinvent the wheel; use libraries.[2] Don’t believe in magic; understand what your librari ...

  7. ajax 跨域请求时url参数添加callback=?会实现跨域问题

    例如: 1.在 jQuery 中,可以通过使用JSONP 形式的回调函数来加载其他网域的JSON数据,如 "myurl?callback=?".jQuery 将自动替换 ? 为正确 ...

  8. C#异常Retry通用类

    系统里面常常调用服务和读写文件里面需要对发生异常,操作失败时进行Retry来尽可能程序的健壮性.最近工作中遇到了,参考了网上的资料,扩展了下.在博客里面备用下: //Retry机制 public st ...

  9. Hasor-Core v0.0.4 & Web v0.0.3 发布

    “Hasor是一款开源的 Java 应用开发框架.它是围绕 Guice 为核心创建的一系列模块组合而成.使用Hasor 会加快软件软件开发效率并降低开发成本.目前 Hasor包含了 Hasor-Cor ...

  10. webapi 中使用 protobuf

    相比json来说,好处是速度更快,带宽占用更小.其效果大致等于json+Gzip. 在webapi中使用protobuf的方法为: 引用nuget包 Install-Package protobuf- ...