前言

每天都要学习很多新的知识,比你厉害的程序员比你还努力,那你混的下这口饭吗?所以不抱怨,坚持!接下来给大家分享的是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. 配置java项目的intellij idea的运行环境

    才疏学浅,只懂一点点前端的皮毛东西,对于项目运行环境的配置一无所知,今天简单记录一下! 前提:装好了jdk.maven.intellij idea. 1. file菜单->Open...打开从S ...

  2. 【JMeter】source("文件路程")和${变量}同时出现会报错

    source("D:\\apache-jmeter-3.0\\testcase\\java\\Test.java"); //${journeyLen} 以上两句在JMeter脚本里 ...

  3. 【java】获取当前环境属性及编码乱码示例

    package 字符编码; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...

  4. iOS 友盟推送,应用内推送启动图推送闪动黑屏,插屏推送方法报错

    以前都是用的极光推送,应公司需求要求使用友盟推送,为了以后是有分享都适用,,, 友盟推送文档,下载demo 感觉比极光用着要简单顺手 一切就绪后,开始发送消息测试,,,,,搞了半天没有发过来消息 原来 ...

  5. 安装MongoDB步骤

    1.第一步是从官网下载匹配自己操作系统的安装文件或压缩文件: 2.随便找个文件夹先解压安装文件,然后在C盘根目录建立一个新文件夹命名为mongodb: 3.将打开刚刚安装的文件,将bin文件夹拷贝到C ...

  6. 关于文件上传的ajax交互

    首先我们来了解一下上传文件 <input type="file"> input的file常用上传类型 后缀名 MIME名称 *.3gpp audio/3gpp, vid ...

  7. Golang 网络爬虫框架gocolly/colly 二 jQuery selector

    Golang 网络爬虫框架gocolly/colly 二 jQuery selector colly框架依赖goquery库,goquery将jQuery的语法和特性引入到了go语言中.如果要灵活自如 ...

  8. Python核心编程--浅拷贝与深拷贝

    一.问题引出浅拷贝 首先看下面代码的执行情况: a = [1, 2, 3] print('a = %s' % a) # a = [1, 2, 3] b = a print('b = %s' % b) ...

  9. Python day02 三元运算

     type  查看数据类型.2 **32  :2的32次方 .浮点的表示类型是小数,但是小数不仅仅包括浮点 浮点数用来处理实数,即带有小数的数字 三元运算:  result = 值1 if 条件 el ...

  10. zabbix借助onealert实现微信报警

    官网:http://wiki.110monitor.com/integration/zabbix-manual.html) Zabbix安装包部署方式 1)下载agent软件包 请在Zabbix服务器 ...