XML学习笔记8——XML中的元素
⼀、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字符集中字符的编码)。如果⽤的是预定义实体引⽤,在和号(&)之后写上字符助记符。
java xml是什么字符引⽤和实体引⽤、预定义实体引⽤之间的区别和共同点:
⾸先,先理解字符集的概念。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段、字符引⽤和实体引⽤(应⽤场景:属性值、字符数据允许出现的地⽅)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论