XML学习笔记8——XML中的元素

XML语言 专栏收录该内容
6 篇文章 0 订阅

一、XML中的元素:元素由开始标签、结束标签、属性及属性值、元素内容构成。空元素由元素标签和属性及属性值构成。
个人理解:此处说的元素内容包括开始标签和结束标签之间出现的一切内容,注意是一切内容无论是注释、其他元素、还是字符数据都属于元素内容。空元素由元素标签构成外还包括写在该空标签中的属性和属性值。

每一个元素有一个用名字标识的类型,同时它可以有一个属性说明集、每一个属性说明有一个名字和一个值。
个人理解:
元素的名字:此处关于元素名字,其实就是开是标签两个尖括号"<>"中标签的名字,即对于标签<p>,来说元素的名字为p。以元素的名字来对元素进行分类。

属性说明集:元素所具有的属性有哪些。

元素的名命:其实就是类似C语言和Java语言中的标识符的名命。
语法规则:
1.不允许以"xm"获其它任何匹配(‘X’|‘x’)、(“M”|“m”)、(“L”|“l”)的字符串开头。意思就是不允许用"xml"、“xMl”、”xML“、“XmL”、“XML”、“XMl”、"XML"等即这类的所有组合形式开头。
因为:上述形式被保留用于XML规范的当前版本或后续版本的标准化。就比如Java语言中的表示符的名命,不允许是保留字和关键字,人家的意思可以简单的理解为任何以(“X”|“x”)、(“M”|”m“)、(“L”|“l”)这类形式开头的都被征用了。

2.只能以字母、下划线、或者冒号开头

3.名称中可以包含字母、数字、下划线以及任何其它XML标准中允许的字符。这一点要求比C语言和Java语言对于标识符名命的规则要宽松的多,可以先简单理解为任何美式键盘上的字符都是可以的。

4.名称中不能包含空格。

5.名称中尽量不要使用冒号,因为冒号在名称空间中被用于分隔名称空间前缀和本地部分。简单理解冒号有一个特殊的用法,用户在定义的时候尽量避免使用冒号。

二、元素的四种形式
1.空元素。例如

2.含有属性的空元素。例如:这是一张图片

特别指出:XML中,元素主要是用来表示数据的,而空元素无法表示任何数据,所以XML中几乎不使用空元素。

3.带有内容的元素。例如…

4.带有内容和属性的元素。例如…

提示:元素和标签这两个次具有不同的含义。元素是指开始标签、结束标签、以及二者以间的一切内容,包括属性、文本、注释以及子元素。例如…看到的一切都是元素的一部分,共同组成元素。标签是一对尖括号和二者之间的内容,包括元素名和所有属性。例如:<student 属性=“属性值”>内容标签的含义是和其里面的属性及属性值。

三、元素内容的构成。
元素的内容:1.子元素、2.字符数据以#PCDATA表示、3.字符引用、4.实体引用(主要是一般实体引用)、5.CDATA段。

1.子元素:本身也是元素、被嵌套在上层的元素之内。子元素是相对于父元素而言的,如果子元素还能嵌套了其他元素,那么它同时也是父元素。例如,对于aaa元素来说,其子元素为bbb,对于bbb来说,子元素是ccc父元素是aaa。子元素、父元素本身就是一个相对的关系。

2.字符数据:在一个元素的内容中,字符数据可以是不包括任何标记的起始定界符和CDATA段的结束定界符的任意字符,简单来说,字符数据类型的元素内容,只要不包括"<"、"&"、和以"]]>"(是CDATA段的结束定界符)。
问题:如果想要在字符数据型元素内容中体现处<、&、]]>时应该怎么办呢?
答案:可以利用字符引用,字符引用的意思其实就是以其他的形式代替字符本身的意思。例如假设1111表是字符a。当然这仅仅是一个假设,字符a有他规定的字符引用形式,这里主要是帮助理解字符引用原理。字符引用的好处就是在不允许字符本身出现的地方可以利用字符引用的形式来代替字符本身,例如对于字符数据类型的元素内容就不允许出现以&、<开头和以]]>结尾的情况。XML处理器在处理文档的时候就会把所有字符引用出现的地方替换回原字符文本。例如上面那个例子,1111表示字符a,那怎么文档中所有1111出现的地方会被换成字符a。当然实际上是不用1111来表示字符a的,他有应用的字符引用。这里只是进行这样一个假设。

特别提示,XML文档本身还是一个文档,那么文档内容中的一切就都是字符。单纯的字符,例如100不是数字100而是字符’1’、‘0’、’0’.一切的文档都是如此。内容都是字符。

3.字符引用和实体引用。
为什么有字符引用和实体引用的说明。
在XML文档内容中即标签之间的元素内容,字符数据中,不能有&、<、因为未经处理的小于号"<“和”&"(和号)在XML文本中往往被注释为标记的其实定界符(例外的情况见下面介绍的CDATA段)。

预定义实体引用:
在XML中,提供了5个预定义的实体引用,分别引用XML文档中的5个特殊字符:大于号>、小于号<、双引号、单引号、和号&。这五个特殊字符也可以通过字符引用的方式去引用。

特别提示:XML文档中的实体引用是需要用户自己定义的,预定实体引用的意思就是XML开发者体现定义好的,不需要自己定义可直接使用。

字符引用和预定义实体引用都是以一个和号(&)开始以一个分号(;)结束。如果用的是字符引用,需要在和号(&)之后再加上一个#号,之后是所需字符的十进制代码或十六进制代码(ISO/IEC 10646字符集中字符的编码)。如果用的是预定义实体引用,在和号(&)之后写上字符助记符。

字符引用和实体引用、预定义实体引用之间的区别和共同点:
首先,先理解字符集的概念。ISO/IEC 10646字符集是众多的字符集的一种,也是最通用的。字符集的就是字符的合集,注意这个字符不单单指的是键盘上的字符,还可能包括中文,英文,等等各国文字甚至键盘上无法显示的字符(如回车)等都可能在字符集中。例如ISO/IEC 10646就几乎包含了这个世界上所有国家的文字和字符的这么一个字符合集。
字符引用的意思就是以人家为字符集中的每一个字符指定了一个代号。且每一个字符都有一个人家规定好的代号。所以在XML文档中,除了可以用字符本身来书写内容还可以通过代号的形式也就是字符引用来书写。特别注意字符引用是和字符集中的一个个字符相对应的。同时还要注意,在XML文档中有的字符是由特殊含义的,例如<表示的标签开始的尖括号,而字符引用则没有这种特殊的含义,他仅仅表示要给字符。在处理上也仅仅是将这一代号的形式替换回原字符但替换回的原文本却没有特殊的含义了。

再看实体引用,实体引用其含义和字符引用是一个意思。都是找一个代号来代替原事物本身,所以才一个叫字符引用一个叫实体引用。一个是字符集中一个个字符的代号,一个是一个个"实体"的代号。此处要注意字符引用仅仅用来引用字符集中的字符。实体引用是可以引用实体的,可以理解字符仅仅是实体的一种。
再看实体这个概念,什么是实体呢?可以将视频、音频、单个的字符、字符串等等都可以看成一个个实体。所i有实体引用可以用简单的代号来引用视频文件、音频文件、字符串、单个字符等等,以后还会详细的介绍的。先有这么一个概念即可。

预定义实体引用:仅仅是对XML中五个特殊字符的引用,也就是给五个特殊字符制定了五个代号而已。当然随着XML版本的不断提高,预定义实体的内容也会不断增多。

总结:字符引用仅仅是对一个个字符的引用,实体引用则是除了可以引用字符外还可以引用任何可以引用的实物。

再看字符引用和实体引用的语法规则:
字符引用:在使用的时候,&#数字;(十进制写法)、&#x数字(十六进制的写法),的组合来代替字符本身。
实体引用:在使用的时候,通过&字符代号;来代替想要引用的实物或者说是实体。
预定义实体:无法在此处敲出。

4.CDATA段
CDATA段中包含的都是纯字符数据,在字符数据可以出现的任何地方都可以使用CDATA段。
分析:
1.CDATA段中包含的都是纯字符数据。
2.在字符数据可以出现的任何地方使用CDATA段。元素内容的形式分为子元素、字符数据、字符引用、实体引用和CDATA段。在元素声明的之后,实是会指出元素内容的类型的,元素内容的类型可以是空元素和子元素(即元素中只能包含子元素不能有字符数据),这样,该元素中的内容就不含字符数据,那么就无法使用CDATA段了。如果元素内容类型为字符数据类型的时候就可以使用CDATA段了。在允许出现字符数据的任何地方使用CDATA段。

CDATA段中,内容只要是不包括CDATA段的结束定界符的任意字符串都可以。简单来说只要不是"]]>"的组合什么都可以写。如果内容需要者三者的组合,在适当的地方加入空格或者卸载两个CDATA段中即可。

问题:目前来说,我们知道CDATA段中也是写字符数据的,那么CDATA段中的字符数据和XML文档元素内容中的字符数据有什么区别呢?
答案:CDATA段主要用于"需要将整个文本解释为字符数据而不是标记的情况下"。CDATA段中的内容不被XML处理器分析,所以可以在其中包含任意字符。例如,在XML文档中,我需要包含Java代码,而Java代码中可能存在着小于号、大于号、双引号、单引号、和号,这些特殊字符这个时候CDATA段就派上用场了。

简单的来讲CDATA段仅仅是为了显示文本,而元素内容中的字符数据可不仅仅只是单纯的文本内容,还有好多的标签和标签中的属性,这些都是有特殊含义的。

问题:CDATA段主要用于"需要将整个文本解释为字符数据而不是标记的情况下使用",CDATA段中的内容不被XML处理器分析。这句话的含义?
个人理解:"需要将整个文本解释为字符数据而不是标记的情况下使用"的意思是——首先在XML文档中书写的字符有些是具有特殊含义的,如<、>、&、双引号和单引号,这些内容是会影响文本的显示的。同时如果仅仅是想单纯的显示标签文本的时候如何,这些是无法在XML文档中直接进行书写的。而CDATA段中的内容无论是什么都会被原样的输出显示,所以就可以实现上述的功能——即单纯的输出某些文本。

CDATA中的内容不被XML处理器分析:注意首先是CDATA段中的内容,而不是整个CDATA段。XML处理器仅仅确定哪些是CDATA段,对里面的内容不做任何处理,这样的好处就是CDATA段中的内容无论是标签还是特殊字符都会按照原样显示。

问题:字符引用实体引用也能实现单纯的文本输出,那么为什么还用CDATA段呢?
答案:小部分的特殊字符可以使用字符引用或者实体引用,但是成段的使用CDATA段更好。因为实体引用和字符引用在XML处理器处理的时候都会有一个将引用替换成原实物的这么一个过程,如果内容太多是很浪费资源的。同时,CDATA段可以成区域的显示文本内容,书写更加方便,整个XML文档看上去也更加清晰明了。

CDATA段的使用语法:注意在字符数据允许的任何地方都可以出现CDATA段。

<![CDATA[ 文本内容。 ]]>

注意以<![CDATA[开始以]]>结束,书写的时候可以先写<!>、再写[]、在写CDATA[]

总结:
元素名字的名命规则:
开头不能以"xml”和其相关的所有内容开头。
开头可以是字符、下划线、冒号。
内容一切合法的字符
不能有空格
最好不要有冒号。

XML文档中,元素内容类型为数据类型的语法要求:
不要有<、&和]]>都可以。

CDATA段中文本的语法要求——只要不是]]>的组合都可以

元素内容的分类:
子元素、字符数据、CDATA段、字符引用和实体引用(应用场景:属性值、字符数据允许出现的地方)

  • 0
    点赞
  • 0
    评论
  • 3
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

双木夕阳

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值