XML(一)XML大揭秘

前言

每天都要学习很多新的知识,比你厉害的程序员比你还努力,那你混的下这口饭吗?所以不抱怨,坚持!接下来给大家分享的是xml。可能很多做开发的都遇到过xml,

比如maven,各种框架的配置文件都有,但是你有没有深入的去了解一下xml呢?xml是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

一、XML简介

1.1、XML简单的历史介绍

  1969年 GML (General Markup Language,通用标记语言):     用于计算机之间的通信,通信就会传输数据,那么就需要一种数据的规范。   1985年 SGML (Standard General Markup Language,标准通用标记语言):对GML进行完善。   1993年 HTML (Hyper Text Markup Language,超文本的标记语言):     随着万维网的推广,在SGML的基础上,又出现了HTML语言,用于万维网上的页面展示。   1998年 XML (Extensible Markup Language,可扩展的标记语言):     HTML有不少的缺陷,HTML语言的标记不能自定义,只能使用固定的有限的标记;     HTML语言的标记本身不能用来描述数据,HTML语言的标记没有国际化(不同浏览器显示同一页面的效果可能不一样),只侧重于对内容的显示。     随着Web上数据的增多,这些HTML存在的缺点就变的不可被忽略。     W3C提供了HTML的几个扩展用来解决这些问题,最后,W3C组织在1998年推出了可扩展标记语言XML。

1.2、认识XML

  XML指可扩展标记语言(Extensible Markup Language)   XML是一种标记语言,很类似HTML   XML的设计宗旨是传输数据,而非显示数据。   XML标签没有被预定义,您需要自行定义标签   XML被设计为具有自我描述性   XML是 W3C 的推荐标准

1.3、XML与HTML的主要差异

XML不是HTML的替代,XML和HTML为不同的目的而设计。   XML被设计为传输和存储数据,其焦点是数据的内容。   HTML被设计用来显示数据,其焦点是数据的外观。   HTML旨在显示信息,而XML旨在存储和传输信息。

1.4、XML的作用

数据传输,数据可读性高,可扩展。使用XML文件传输数据,现在已经被越来越多的项目所采纳。 结构化明确,自我描述能力强,描述带关系的数据(作为软件的配置文件),如tomcat、mybatis、hibernate、spring,struts等   充当小型文本数据库。

二、XML文档规则——如何构建一个良构的XML文档

2.1、XML文档必须有根元素

XML必须包含根元素,它是所有其他元素的父元素,比如:

  以下实例中“root”就是根元素:

// 1    <root>
// 2        <child>
// 3            <subchild>.....</subchild>
// 4        </child>
// 5    </root>

  以下实例中“note”是根元素:  

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>

2.2、XML声明

  XML声明是XML文件的可选部分,如果存在必须放在文档的第一行,如下所示:

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

  以上实例包含XML版本,以及该XML文档所使用的编码;   UTF-8也是HTML5,CSS,JavaScript,PHP和SQL的默认编码。

2.3、所有的XML元素都必须有一个关闭标签

  在HTML中,某些元素不必有一个关闭标签;例如:

<p>This is a paragraph.
<br>

  在XML中,省略关闭标签是非法的。所有元素都必须有关闭标签:

<p>This is a paragraph.</p>
<br />

  <class />中间没有数据可以写成这样

2.4、XML对大小写敏感

  XML标签对大小写敏感。标签<Letter>与标签<letter>是不同的。   必须使用相同的大小写来编写开始标签和结束标签:     <Message>This is incorrect</message> // 错误的XML标签书写     <message>This is correct</message> // 正确的XML标签书写

2.5、XML必须正确嵌套

  在HTML中,常会看到没有正确嵌套的元素:<b><i>This text is bold and italic</b></i>   在XML中,所有元素都必须彼此正确地嵌套:<b><i>This text is bold and italic</i></b>

2.6、XML属性值必须加引号

与HTML类似,XML元素也可拥有属性(名称/值的对),并且在同一标签中属性不能重复。 在XML中,XML的属性值必须加引号,而且必须有值(就算一个空格也行)。

<!-- 错误的属性书写方式 -->
    <note date=12/11/2007>
        <to>Tove</to>
        <from>Jani</from>
    </note>

<!-- 正确的属性书写方式 -->
    <note date="12/11/2007">
        <to>Tove</to>
        <from>Jani</from>
    </note>

2.7、PCDATA与CDATA

  PCDATA(Parsed Character Data):指可以被xml解析器解析的内容,有些特殊字符需要借助实体来被解析器解析,XML中的正常内容都是属于PCDATA。   CDATA(Character Data):指不会被xml解析器解析的内容,按照字符串原样输出。     语法:<![CDATA[要原样输出的内容]]>     如:<![CDATA["你好啊 &amp;&quot;&apos;abc"]]>     输出结果:"你好啊 &amp;&quot;&apos;abc"

2.8、实体引用

  在XML中,一些字符拥有特殊的意义。如果您把字符"<"放在XML元素中,会发生错误,这是因为解析器会把它当作新元素的开始。以下实例会产生XML错误:     <message>if salary < 1000 then</message>   为了避免这个错误,请用实体引用来代替 "<" 字符:     <message>if salary &lt; 1000 then</message>   在XML中,有5个预定义的实体引用:

&lt;    <    less than(小于号)
&gt;    >    greater than(大于号)
&amp;    &    ampersand(与)
&apos;    '    apostrophe(单引号)
&quot;    "    quotation mark(双引号)

  自定义实体:   语法:     <!DOCTYPE 根元素名[       <!ENTITY 实体名 实体内容 >       <!ENTITY 实体名 实体内容 >     ...     ]>   例如:相同的内容重复出现,可以定义一个实体     <!DOCTYPE students[        <!ENTITY address "江西省南昌市南昌县">     ]>   实体名:address,使用方法:&address;实体可出现的位置:标签内容,属性值,以及作为其他实体的值。   注:重复定义相同名称的实体时,以写在第一位的为准。

2.9、XML中的注释

  在XML中编写注释的语法与HTML的语法很相似。<!-- This is a comment -->   注释可以出现在任意位置。   注释不可嵌套使用。

2.10、XML的空格问题

  HTML会把多个连续的空格字符裁减(合并)为一个。例如:     代码:<p>这是 两 本书</p>     显示:这是 两 本书   在XML中,把多个连续的空格字符裁减(合并)为一个。     代码:<p>这是 两 本书</p>     显示:这是 两 本书

2.11、XML的树形结构

  XML文档形成了一种树型结构,它从“根部”开始,然后扩展到“枝叶”。叶子:文本标签(没有具体体现)的值   XML文档必须包含根元素。该元素是所有其他元素的父元素。   XML文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。   所有的元素都可以有子元素。   父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。   所有的元素都可以有文本内容和属性(类似HTML)。   注:更多关于XML树形结构请参见:http://www.runoob.com/xml/xml-tree.html

三、XML的处理指令与命名空间的问题

3.1、XML的处理指令

  处理指令,简称PI(Processing Instruction),处理指令告诉我们解析引擎采用什么方式解析xml文档内容;   处理指令以“<?”开头,以“?>”结尾,xml头部声明就是最常见的一种处理指令,告诉解析器采用什么字符编码解析内容。   xml文档中可以有多个处理指令。

  举例:xml-stylesheet处理指令,通知解析引擎使用css文件去显示xml文档内容

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/css" href="style.css" ?>
    <students>
        <name>张三</name>
        <age>20</age>
    </students>

style.css:

    name{
        font-size:30px;
        color:red;
    }
    age{
        font-size:50px;
        color:green;
    }

  处理指令很少被使用。主要用于链接XML文档到样式表。

3.2、XML的命名空间

  在XML中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。

  举例:

    在students1.xml中:

    <students>
        <student>
            <name>张三</name>
        </student>
        <student>
            <name>李四</name>
        </student>
    </students>

    在students2.xml中:    

    <students>
        <student>
            <name>张三</name>
        </student>
        <student>
            <name>李四</name>
        </student>
    </students>

  两个文档中都有students、student标签,一起使用时会发生命名冲突 

  解决方法:   1)使用命名空间     语法:xmlns:namespace-prefix="namespaceURI"(一般都是公司的域名)     使用范围:当前标签以及子标签

    在students1.xml中:

    <students1:students xmlns:students1="http://briup.com/students1">
        <students1:student>
            <students1:name>张三</students1:name>
        </students1:student>
    <students1:students>

  与仅仅使用前缀不同,我们为<students>标签添加了一个xmlns属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。   当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。   注:用于标示命名空间的url不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。

  2)使用默认的命名空间

    为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作     语法:xmlns="namespaceURL"

    <students xmlns="http://briup.com/students1">
        <student>
            <name>张三</name>
        </student>
    <students>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发

CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

CSS不像其它高级语言一样支持算术运算、变量、流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等。...

2115
来自专栏前端达人

2018年最全面的前端面试题都在这里了

意义:根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。 注意: 1.尽可能少的...

4.1K6
来自专栏为数不多的Android技巧

Android Studio你不知道的快捷键(二)

在Android Studio你不知道的快捷键(一)里面,主要讲述了一些窗口操作的快捷键还有补全参数提示等,这一篇会分享一些代码代码编辑的快捷键。(默认Keym...

1142
来自专栏北京马哥教育

python实现简单爬虫功能

iOS开发如果之前没接触过除了c和c++(c++太难了,不花个十来年基本不可能精通)的语言,第二门语言最好的选择就是Python.原因就是 1.语法简单 2.库...

3227
来自专栏知道一点点

angularjs中常用的ng指令介绍【转载】

原文:http://www.cnblogs.com/lvdabao/p/3379659.html

1153
来自专栏非著名程序员

仿苹果数字键盘以及判断信用卡有效期的Editext

这次带来一个小小的信用卡有效期规则的Editext,额外赠送内置数字键盘的开发 首先来看下需求: 1) 月份数字: λ 数字输入0:后一位数字可输入...

2185
来自专栏zhangdd.com

ceph性能测试

该工具的语法为:rados bench -p <pool_name> <seconds> <write|seq|rand> -b <block size> -t...

2042
来自专栏Java帮帮-微信公众号-技术文章全总结

深入浅出爬虫之道: Python、Golang与GraphQuery的对比

本文将分别使用 Python ,Golang 以及 GraphQuery 来解析某网站的 素材详情页面 ,这个页面的特色是具有清晰的数据结构,但是DOM结构不够...

1001
来自专栏Spring相关

Springboot用官方建议访问Html页面并接传值

我们以前通常习惯用webapp来放置jsp页面,但是到了Springboot中,官方建议用Static文件夹来存放及静态的资源,

4294
来自专栏知道一点点

走进AngularJs(二) ng模板中常用指令的使用方式

  通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的。ng的模板真...

1452

扫码关注云+社区

领取腾讯云代金券