XML 指可扩展标记语言eXtensible Markup Language

XML 被设计用来传输和存储数据。

什么是 XML?

  • XML 指可扩展标记语言
  • XML 是一种标记语言,非常类似 HTML
  • XML 的设计宗旨是数据传输,而非显示数据
  • XML 标签没有被提前定义,您须要自行定义标签。
  • XML 被设计为具有自我描写叙述性。

 XML 不会做不论什么事情

XML 被设计用来结构化、存储以及传输信息。

以下是 John 写给 George 的便签(note),存储为 XML:

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

上面的这条便签具有自我描写叙述性。它拥有标题以及留言,同一时候包括了发送者和接受者的信息。

可是,这个 XML 文档仍然没有做不论什么事情。它不过包装在 XML 标签中的纯粹的信息。我们须要编写软件或者程序,才干传送、接收和显示出这个文档。

XML 不过纯文本

XML 没什么特别的。它不过纯文本而已。有能力处理纯文本的软件都能够处理 XML。

只是,可以读懂 XML 的应用程序可以有针对性地处理 XML 的标签。标签的功能性意义依赖于应用程序的特性。

通过 XML 您能够发明自己的标签

上例中的标签没有在不论什么 XML 标准中定义过(比方 <to> 和 <from>)。这些标签是由文档的创作者发明的。

这是由于 XML 没有提前定义的标签。

在 HTML 中使用的标签(以及 HTML 的结构)是提前定义的。HTML 文档仅仅使用在 HTML 标准中定义过的标签(比方 <p> 、<h1> 等等)。

XML 同意创作者定义自己的标签和自己的文档结构。

一个 XML 文档实例

XML 使用简单的具有自我描写叙述性的语法:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

第一行是 XML 声明。它定义 XML 的版本号 (1.0) 和所使用的编码 (ISO-8859-1 = Latin-1/西欧字符集)。

下一行描写叙述文档的根元素(像在说:“本文档是一个便签”):

<note>

接下来 4 行描写叙述根的 4 个子元素(to, from, heading 以及 body):

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

最后一行定义根元素的结尾:

</note>

从本例能够设想,该 XML 文档包括了 John 给 George 的一张便签。

XML 具有出色的自我描写叙述性,你允许吗?

XML 文档形成一种树结构

XML 文档必须包括根元素。该元素是全部其它元素的父元素。

XML 文档中的元素形成了一棵文档树。这棵树从根部開始,并扩展到树的最底端。

全部元素均可拥有子元素:

<root>
<child>
<subchild>.....</subchild>
</child>
</root>

父、子以及同胞等术语用于描写叙述元素之间的关系。父元素拥有子元素。同样层级上的子元素成为同胞(兄弟或姐妹)。

全部元素均可拥有文本内容和属性(类似 HTML 中)。

实例

上图表示以下的 XML 中的一本书:

<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

样例中的根元素是 <bookstore>。文档中的全部 <book> 元素都被包括在 <bookstore> 中。

<book> 元素有 4 个子元素:<title>、< author>、<year>、<price>。

全部 XML 元素都须有关闭标签

在 HTML,常常会看到没有关闭标签的元素:

<p>This is a paragraph
<p>This is another paragraph

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

<p>This is a paragraph</p>
<p>This is another paragraph</p>

凝视:您或许已经注意到 XML 声明没有关闭标签。这不是错误。声明不属于XML本身的组成部分。它不是 XML 元素,也不须要关闭标签。

XML 标签对大写和小写敏感

XML 元素使用 XML 标签进行定义。

XML 标签对大写和小写敏感。在 XML 中,标签 <Letter> 与标签 <letter> 是不同的。

必须使用同样的大写和小写来编写打开标签和关闭标签:

<Message>这是错误的。</message>

<message>这是正确的。</message>

凝视:打开标签和关闭标签通常被称为開始标签和结束标签。不论您喜欢哪种术语,它们的概念都是同样的。

在 XML 中,全部元素都必须彼此正确地嵌套:

<b><i>This text is bold and italic</i></b>

上例的意思是:因为 <i> 元素是在 <b> 元素内打开的,那么它必须在 <b> 元素内关闭。

XML 文档必须有根元素

XML 文档必须有一个元素是全部其它元素的父元素。该元素称为根元素。

<root>
<child>
<subchild>.....</subchild>
</child>
</root>

XML 的属性值须加引號

与 HTML 类似,XML 也可拥有属性(名称/值的对)。

在 XML 中,XML 的属性值须加引號。请研究以下的两个 XML 文档。第一个是错误的,第二个是正确的:

<note date=08/08/2008>
<to>George</to>
<from>John</from>
</note>
<note date="08/08/2008">
<to>George</to>
<from>John</from>
</note>

在第一个文档中的错误是,note 元素中的 date 属性没有加引號。

XML 中的凝视

在 XML 中编写凝视的语法与 HTML 的语法非常相似:

<!-- This is a comment --> 

什么是 XML 元素?

XML 元素指的是从開始标签直到结束标签的部分。

元素可包括其它元素、文本或者两者的混合物。元素也能够拥有属性。

<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

在上例中,<bookstore> 和 <book> 都拥有元素内容,由于它们包括了其它元素。<author> 仅仅有文本内容,由于它仅包括文本。

在上例中,仅仅有 <book> 元素拥有属性 (category="CHILDREN")。



XML 元素能够在開始标签中包括属性,类似 HTML。

属性 (Attribute) 提供关于元素的额外(附加)信息。

XML 属性必须加引號

属性值必须被引號包围,只是单引號和双引號均可使用。比方一个人的性别,person 标签能够这样写:

<person sex="female">

或者这样也能够:

<person sex='female'>

凝视:假设属性值本身包括双引號,那么有必要使用单引號包围它,就像这个样例:

<gangster name='George "Shotgun" Ziegler'>

或者能够使用实体引用:

<gangster name="George &quot;Shotgun&quot; Ziegler">

XML 元素 vs. 属性

请看这些样例:

<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person> <person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>

在第一个样例中,sex 是一个属性。在第二个样例中,sex 则是一个子元素。两个样例均可提供同样的信息。

没有什么规矩能够告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在 HTML 中,属性用起来非常便利,可是在 XML 中,您应该尽量避免使用属性。假设信息感觉起来非常像数据,那么请使用子元素吧。

我最喜欢的方式

以下的三个 XML 文档包括全然同样的信息:

第一个样例中使用了 date 属性:

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

第二个样例中使用了 date 元素:

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

第三个样例中使用了扩展的 date 元素(这是我的最爱):

<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>

避免 XML 属性?

因使用属性而引起的一些问题:

  • 属性无法包括多重的值(元素能够)
  • 属性无法描写叙述树结构(元素能够)
  • 属性不易扩展(为未来的变化)
  • 属性难以阅读和维护

请尽量使用元素来描写叙述数据。而只使用属性来提供与数据无关的信息。

不要做这种蠢事(这不是 XML 应该被使用的方式):

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

针对元数据的 XML 属性

有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 ID 属性是一样的。这个样例向我们演示了这样的情况:

<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 不过一个标识符,用于标识不同的便签。它并非便签数据的组成部分。

在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

XML文件的更多相关文章

  1. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  2. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  3. MyBatis2:config.xml文件

    前言 前一篇文章,讲了MyBatis入门,讲到了MyBatis有两个基本的配置文件,一个用来配置环境信息,一个用来写SQL语句.前者我把它命名为config.xml,config.xml的内容是: & ...

  4. 3. 解析 struts.xml 文件

    1. struts.xml 文件基本配置: 主要放在资源路径下,配置 sturts2相关的 Action , 拦截器等配置 <struts> <!-- 设置常量 --> < ...

  5. Eclipse代码和xml文件的智能提示

    一.代码智能提示 Windows → Preferences → Java→ Editor → Content Assist 将 Auto activation delay(ms): 改为 0 将 A ...

  6. node使用xml-writer生成本地XML文件实例

    npm中xml-writer文档的链接地址:https://www.npmjs.com/package/xml-writer npm中的文档比较简单,而且生成本地xml文件的demo并不正确.本篇是对 ...

  7. xml文件解析(解析以后在RootTableViewController输出)

    这是从美团弄得xml文件,地区和经纬度. 你点了地区以后 ,  就可以查看经纬度 ,因为笔者懒, 有现成的文本框 , 所有偷懒了. 下面是一些枯燥的代码了 . #import <UIKit/UI ...

  8. iOS xml文件的解析方式 XMLDictionary,GDataXMLNode,NSXMLParser

    iOS9之后,默认网络请求是https,所有我们要设置一下网络安全,具体设置如下 1.第三方类库 XMLDictionary 下载地址: https://github.com/nicklockwood ...

  9. java-w3c.document生成xml文件

    案例 /** * 创建和写入xml * @param xmlrootname * @param waitConverList */ private void createAndWriterXML(St ...

  10. 使用sublime一键格式化XML文件

    1 sublime简介 sublime是一款代码编辑和阅读软件,体积小,运行快,界面非常简洁漂亮.官方地址:https://www.sublimetext.com/ 2 在sublime上安装插件 使 ...

随机推荐

  1. C#读取注册表信息

    注册表是视窗系统的一个核心的数据库,在这个数据库中存放中与系统相关的各种参数,这些参数直接控制中系统的启动.硬件的驱动程序安装信息以及在视窗系统上运行的各种应用程序的注册信息等.这就意味着,如果注册表 ...

  2. 关于xml的一些知识,DTD,XSD

    DTD 文档类型定义(Document Type Definition)是一套关于标记符的语法规则.它是标准通用标记语言和 可扩展标记语言1.0版规格的一部分,是文档的验证机制.文档类型定义是一种保证 ...

  3. Ubuntu安装node.js

    通过PPA安装Node.js sudo apt-get install python-software-properties sudo add-apt-repository ppa:chris-lea ...

  4. poj 1201 Intervals(差分约束)

    题目:http://poj.org/problem?id=1201 题意:给定n组数据,每组有ai,bi,ci,要求在区间[ai,bi]内至少找ci个数, 并使得找的数字组成的数组Z的长度最小. #i ...

  5. bzoj1532

    就题目而言,这道题是裸的二分+最大流 但是这样是TLE的,我们考虑优化 1. 我们可以先贪心,这样二分的上界就可以缩小了 2. 最大流我们可以不急着跑增广路,我们可以先贪心一个流然后再跑增广路 但是我 ...

  6. poj2376

    最少区间覆盖问题: 首先我们想到将r排序,则以得出dp方程 f[i]=1 (l[i]=1) =min{f[j]}+1 (r[j]+1>=l[i]) 最后ans是min{f[j]} (r[j]&g ...

  7. Java 简单登录MVC

    构建一个简单的基于MVC模式的JavaWeb 零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是 ...

  8. 浅谈HTTP中Get、Post、Put与Delete的区别

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...

  9. 10、Android数据存储

    课程目标: 掌握Android中数据存储的几种方式 熟练使用PreferenceActivity&PreferenceScreen做专业的Setting功能 熟练使用SQLite3来存储数据 ...

  10. Codeforces 628D 数位dp

    题意:d magic number(0<=d<9)的意思就是一个数,从最高位开始奇数位不是d,偶数位是d 题目问,给a,b,m,d(a<=b,m<2000)问,a,b之间有多少 ...