啥是XML?
xml (Extensible Markup Language)可扩展的标记语言,顾名思义,XML最重要的两个因素:

  • 可扩展
  • 标签,可以自定义的标签

XML可以看作是HTML的一个超集,但是,两者设计的目的是不一样的. HTML的设计目的是显示信息,而XML的设计目的是传输信息.

XML干啥使

  • 用来结构化描述有关系的数据
  • XML可以用来把数据从HTML中分离出来
  • XML可以更好的在异构系统之间传输数据
  • XML还大量的被应用于软件的配置文件

XML现有版本
XML目前有1.0 和1.1 两个版本,但是1.1不向后兼容1.0,所以大家基本还是在用1.0

XML文件可以分为以下几部分内容:

  • 文档声明
  • 元素
  • 属性
  • 注释
  • CDATA区
  • 处理指令(PI)

文档声明

  • <?xml version="1.0" encoding="UFT-8" ?>
  • 文档声明必须出现在xml的第一行位置.
  • 属性:
    • version=”1.0” xml的版本
    • encoding=”UTF-8” 编码集
    • standalone=”[yes|no]” 代表xml是否可以独立,其实也不写都可以引入外部文件.

乱码问题,要保证保存和打开的编码方式一致(我一直的解决方案就是永远UTF-8…)

元素(标签)

元素指的是XML文件中出现的标签,标签分为起始和结束.

  • 开始和结束标签

    • 包含标签主体:<abc>文本</abc>
    • 不包含标签主体: <abc/>
  • 标签不能交叉嵌套
  • 只能有且必须有一个根元素

元素的命名规范:

  • 大小写敏感
  • 不能以数字或-开头
  • 不能以xml开头
  • 不能有空格和冒号
  • 不可以包含冒号和空格
  • 不能以xml开头(大小写都不行)

属性

一个元素可以有多个属性,属性应该有自己的名字和值.比如<mytag name="value">

  • 在同一元素上不能有相同的属性
  • 属性必须用引号(单引号或者双引号)
  • 属性可以自定义,并且命名规范与元素一致

XML中的属性很多时候是可以被转换成元素的. 比如

<person sex="male">
<name>Brady</name>
</person>

完全可以写成

<person>
<sex>male</sex>
<name>Brady</name>
</person>

那么,什么时候使用属性,什么时候使用标签呢? W3Cschool上那大哥说,尽量把看起来像数据的都用标签表示.为什么呢?

  • 属性无法包含多重值(复杂结构),BUT!!!元素可以!!!
  • 属性不能描述树状结构,BUT!!!元素可以!!!
  • 属性不易扩展,BUT!!!元素可以!!!
  • 属性难以阅读和维护,BUT!!!元素可以!!!

看一个例子,比如要修改下面这个XML,使它更合理,那么有三种写法

<note date="08/08/2008">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

普通写法:

<note>
<date>08/08/2008</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

文艺写法:

<note>
<date>
<day>08</day>
<month>08</month>
<year>2008</year>
</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

二逼写法:

<note day="08" month="08" year="2008"
to="George" from="John" heading="Reminder"
body="Don't forget the meeting!">
</note>

上面说把所有看起来像数据的都用标签,那我看起来所有玩意儿都像数据咋整…

看下面这个例子:

<messages>
<note id="501">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
<note id="502">
<to>John</to>
<from>George</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>

这里就是用了id来作为属性. 所以这么说,元数据(用于修饰数据的数据)应当作为属性来使用,而数据本身应该存储为元素.

注释

  • 和HTML的注释,一毛一样 <!-- -->
  • 注释不能嵌套

特殊字符

  • < &lt;
  • > &gt;
  • & &amp;
  • quot;
  • &apos;

CDATA区域

PCDATA区域值的是被解析的字符数据,(Parsed Character Data)
CDATA区域中的文本会被解析器忽略,也就是说CDATA区域的字符串仅仅就是个字符串不会被作为XML解析.

<![CDATA[
内容会被看作字符串
]]>

CDATA区域的作用:
在XML中的< 和&是非法的,可以通过转义字符来解决,但是如果一个文本区域出现大量的类似字符,转义字符就很麻烦.
这时候可以使用CDATA区域来解决这个问题.

处理指令

处理指令,简称PI(Processing Instruction),是用来指挥软件如何解析XML文档的.被<? ?>包裹起来的就是PI,比如前面说到的XML文档声明其实就是一个PI.
这个貌似用处不是很大…不想看了

XML.01-语法简介的更多相关文章

  1. 2016 - 1 - 23 xml解析 -- 语法简介

    一: XML的概念 1. 一种可拓展标记语言 2. 与json一样,也是一种常用的数据交互格式 3. 一般也叫XML文档---XML Document 二: XML语法   1.一个完整的XML文档一 ...

  2. ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介

    ROS 提高篇 之 Launch 深入研究 - 01 - 启动文件的编程 - ROS 的 XML语法简介 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...

  3. XML语言1.简介和语法

    一.什么是XML语言? XML 指可扩展标记语言(Extensible Markup Language) Xml是独立于软件和硬件的信息传输工具. XML 是一种很像HTML的标记语言. 但xml不是 ...

  4. xml的语法与创建

    xml语法很简单,但很严格,如果出现错误则不能正常解析,而HTML如果出现局部的错误,照样解析 xml第一行必须写xml头<?xml version='1.0' encoding='utf8'? ...

  5. 01 HDFS 简介

    01.HDFS简介 大纲: hadoop2 介绍 HDFS概述 HDFS读写流程 hadoop2介绍 框架的核心设计是HDFS(存储),mapReduce(分布式计算),YARN(资源管理),为海量的 ...

  6. XML代码生成器——XMLFACTORY 简介(四)

    XML代码生成器——XMLFACTORY 简介(四) 这一篇我们讲“类属性”页签的配置功能,您将了解到:如何为元素子值指定类属性的名称,数据类型,及容器类型. 如果,你没看过这个系列的第一篇文章,请先 ...

  7. XML代码生成器——XMLFACTORY 简介(三)

    XML代码生成器——XMLFACTORY 简介(三) 这一篇我们讲“类名称”页签 的配置功能,您将了解到:如何为Xml元素指定对应的类名称及脱壳功能. 如果,你没看过这个系列的第一篇文章,请先去看这篇 ...

  8. XML代码生成器——XMLFACTORY 简介(一)

    XML代码生成器——XMLFACTORY 简介(一) 软件开发中经常要和第三方应用交互数据,特别是在银行.电信行业,这种需求更是必不可少,往往一个系统要和三五个其它系统交互数据,而数据交换的报文经常采 ...

  9. XML代码生成器——XMLFACTORY 简介(二)

    XML代码生成器——XMLFACTORY 简介(二)      因为春节和项目上线的原因,离写上一篇文章的时间已经好久了. 不知道是事情太多了,还是自已效率太低了.总之是时间不够用. 哎,苦逼的程序员 ...

随机推荐

  1. AXIS最佳实践

    前言: Axis是apache一个开源的webservice服务,需要web容器进行发布.本节主要用于介绍使用Axis开发webservice,包括服务端的创建.webservice的部署.客户端的调 ...

  2. mybatis实战教程(mybatis in action)之十:mybatis SqlSessionSupport 的使用,构件DAO 层的应用

    前面的系列mybatis 文章,已经基本讲到了mybatis的操作,但都是基于mapper隐射操作的,在mybatis 3中这个mapper 接口貌似充当了以前在ibatis 2中的 DAO 层的作用 ...

  3. day24:面向对象设计与面向对象编程、类和对象

    一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...

  4. 【学】React的学习之旅2 - React Component的生命周期

    分成三个状态: Mounted Update Unmounted Mounted:当我们看到组件在浏览器中从无到有的效果的时候,mounted已经结束了,这个组件已经被mounted了 有这个阶段有2 ...

  5. Eclipse调试时附加匹配版本的JAR包源码:Edit Source Loopup

  6. UVA 1151 买还是建(最小生成树)

    买还是建 紫书P358 [题目链接]买还是建 [题目类型]最小生成树 &题解: 这题真的心累,看了3天,最后照着码还是wa,先放lrj代码,以后再看吧 &代码: // UVa1151 ...

  7. JVM实用参数(五)新生代垃圾回收

    本部分,我们将关注堆(heap) 中一个主要区域,新生代(young generation).首先我们会讨论为什么调整新生代的参数会对应用的性能如此重要,接着我们将学习新生代相关的JVM参数. 单纯从 ...

  8. Python解析命令行读取参数 -- argparse模块

    在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数.万能的python就自带了argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写 ...

  9. webkit.net 浏览器开发

    webkit.net 浏览器开发: http://www.cnblogs.com/linyijia/p/4045333.html

  10. go 版本 gRPC 环境搭建(3.0正式版)

    之前装过 gRPC 的各个测试版本,有些残余的文件,正式版的安装和之前残留的清除整理如下:   安装 go 版本的 gRPC go 的安装略过.需要 go 1.5 以上版本. $ go version ...