前言

每天都要学习很多新的知识,比你厉害的程序员比你还努力,那你混的下这口饭吗?所以不抱怨,坚持!接下来给大家分享的是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=//>
<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></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>

students1.xml

    在students2.xml中:    

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

students2.xml

  两个文档中都有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>

students1.xml

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

  2)使用默认的命名空间

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

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

students1.xml

XML(一)XML大揭秘的更多相关文章

  1. XML 与 JSON大PK

    导读 XML 和 JSON 是现今互联网中最常用的两种数据交换格式.XML 格式由 W3C 于 1996 年提出.JSON 格式由 Douglas Crockford 于 2002 年提出.虽然这两种 ...

  2. 都 2021 年了,竟然有人搞大数据时忽略 JSON 而去研究用 C# 把 XML 转换为 XML 的技术

    在大数据项目开发过程中,ETL(Extract-Transform-Load)是必不可少.即便目前 JSON 非常流行,开发人员也有必定会有对远古系统的挑战,而 XML 格式的数据源作为经典存在浑身上 ...

  3. hadoop三个配置文件的参数含义说明core-site.xml,hdfs-site.xml,mapred-site.xml

    配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知道这些配置文件有哪些配置可以生 ...

  4. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  5. Linq to XML操作XML文件

    LINQ的类型 在MSDN官方文件中,LINQ分为几种类型: . LINQ to Objects(或称LINQ to Collection),这是LINQ的基本功能,针对集合对象进行查询处理,包括基本 ...

  6. Java SE之XML<二>XML DOM与SAX解析

    [文档整理系列] Java SE之XML<二>XML DOM与SAX解析 XML编程:CRUD(Create Read Update Delete) XML解析的两种常见方式: DOM(D ...

  7. springmvc.xml,context.xml和web.xml

    1:springmvc.xml配置要点 一般它主要配置Controller的组件扫描器和视图解析器 下为:springmvc.xml文件 <?xml version="1.0" ...

  8. HTTP 响应实体主体:XML 及 XML parser

    本文内容 HTTP 响应实体主体:XML XML parser 总结 各编程语言实现的 XML parser   HTTP 响应实体主体:XML 实体主体(entity-body)通常是HTTP响应里 ...

  9. 【腾讯Bugly干货分享】iOS黑客技术大揭秘

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5791da152168f2690e72daa4 “8小时内拼工作,8小时外拼成长 ...

  10. XML 参考:XML基础 XML 简介

    XML 参考:XML基础 -- XML简介和用途 转:http://www.cnblogs.com/Dlonghow/archive/2009/01/22/1379799.html XML 参考:XM ...

随机推荐

  1. 在 ReactNative 的 App 中,集成 Bugly 你会遇到的一些坑

    一.前言 最近开新项目,准备尝试一下 ReactNative,所以前期做了一些调研工作,ReactNative 的优点非常的明显,可以做到跨平台,除了少部分 UI 效果可能需要对不同的平台进行单独适配 ...

  2. Python学习日记day10------函数的命名空间、作用域与闭合函数

    1,参数陷阱 如果默认参数的只是一个可变数据类型,那么每一次调用的时候,如果不传值就共用这个数据类型的资源. 2,三元运算 c=a if a>b else b#如果a>b返回a,否则,返回 ...

  3. ubuntu16.04 查询ip,网关,dns信息

    用ifconfig命令只能查询ip,子网掩码信息,不能获取dns和网关信息 用下面命令即可查询 nmcli dev show

  4. 如何严格设置php中session过期时间

    如何严格限制session在30分钟后过期! 1.设置客户端cookie的lifetime为30分钟: 2.设置session的最大存活周期也为30分钟: 3.为每个session值加入时间戳,然后在 ...

  5. lesson - 1 - IP /DNS /cat !$ /putty 知识扩充

    一.知识点扩充 1.嵌入式Linux 开发与运维 .安卓手机  .     Linux真正的用武之地是蓬勃发展的信息接入设备市 场.这些新兴的设备只有有限的内存,价格也只有几百美元,因此开发者需要新的 ...

  6. Python-String字符串的相关方法

  7. tomcat发布项目绑定域名总结

    现在很多的公司的网站都是用tomcat作为应用服务区的,可是对于初学者,8080端口号是如何去掉的,这些网站是如何和域名绑定到一起的呢?一个tomcat是如何绑定多域名?并且这些域名是如何对应不同的项 ...

  8. day 10 字符编码和文件处理 细节整理

    pycharm是文本编辑器. 大概理解为:  输出到屏幕上的时候,是解码过的字符串,用 decode 处理的时候要编码成相应的流, encode 成你要用的格式就可以了 1 .字符编码: 字符==== ...

  9. python重试装饰器的简单实现

    简单实现了一个在函数执行出现异常时自动重试的装饰器,支持控制最多重试次数,每次重试间隔,每次重试间隔时间递增. 最新的代码可以访问从github上获取 https://github.com/black ...

  10. 【读书笔记与思考】《python数据分析与挖掘实战》-张良均

    [读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...