XML语法

所有 XML 元素都须有关闭标签

XML 标签对大小写敏感

XML 必须正确地嵌套

XML 文档必须有根元素

  就像HTML一样,HTML必须有<html>根元素。XML也必须有一个根元素,但是这个根元素是自己定义的,而非HTML那样已经定义好的

XML 的属性值须加引号

实体引用

  在 XML 中,一些字符拥有特殊的意义。如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始,这样会产生 XML 错误。

  1.   <message>if salary < 1000 then</message>

  为了避免这个错误,请用实体引用来代替 "<" 字符

  <message>if salary &lt; 1000 then</message>

  xml中,5个预定义的实体引用:

  &lt;  <  小于

  &gt;  >  大于

  &amp;  &  和号

  &apos;  '  单引号

  &quot;  "  引号

XML 中的注释
  与 HTML 的语法一样

在 XML 中,空格会被保留

  HTML 会把多个连续的空格字符裁减(合并)为一个,在 XML 中,文档中的空格不会被删节

XML 以 LF 存储换行

  在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。在 Unix 应用程序中,新行以 LF 字符存储。而  Macintosh 应用程序使用 CR 来存储新行

XML元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

  1. <bookstore>
  2. <book category="CHILDREN">
  3. <title>Harry Potter</title>
  4. <author>J K. Rowling</author>
  5. <year>2005</year>
  6. <price>29.99</price>
  7. </book>
  8. <book category="WEB">
  9. <title>Learning XML</title>
  10. <author>Erik T. Ray</author>
  11. <year>2003</year>
  12. <price>39.95</price>
  13. </book>
  14. </bookstore>

XML 命名规则

  名称可以包含字母、数字以及其他的字符
  名称不能以数字或者标点符号开始
  名称不能以字母 xml(或者 XML、Xml 等等)开始
  名称不能包含空格

最佳命名习惯

使名称具有描述性。使用下划线的名称也很不错:<first_name>、<last_name>。

名称应简短和简单,比如:<book_title>,而不是:<the_title_of_the_book>。

避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为您想要从 first 里边减去 name。

避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。

避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。

XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的命名规则来命名 XML 文档中的元素。

在 XML 中,éòá 等非英语字母是完全合法的,不过需要留意,您的软件供应商不支持这些字符时可能出现的问题。

XML 元素是可扩展的

  XML 元素是可扩展,以携带更多的信息,如:

  1. <note>
  2. <to>Tove</to>
  3. <from>Jani</from>
  4. <body>Don't forget me this weekend!</body>
  5. </note>

让我们设想一下,我们创建了一个应用程序,可将 <to>、<from> 以及 <body> 元素从 XML 文档中提取出来,并产生以下的输出:

  1. MESSAGE
  2. To: Tove
  3. From: Jani
  4.  
  5. Don't forget me this weekend!

想象一下,XML 文档的作者添加的一些额外信息:

  1. <note>
  2. <date>2008-01-10</date>
  3. <to>Tove</to>
  4. <from>Jani</from>
  5. <heading>Reminder</heading>
  6. <body>Don't forget me this weekend!</body>
  7. </note>

那么这个应用程序会中断或崩溃吗?

不会。这个应用程序仍然可以找到 XML 文档中的 <to>、<from> 以及 <body> 元素,并产生同样的输出。

XML 的优势之一,就是可以在不中断应用程序的情况下进行扩展

XML属性

XML元素具有属性,类似 HTML。

属性(Attribute)提供有关元素的额外信息

HTML例子:

  1. <img src="computer.gif">
  2. <a href="demo.html">

XML例子:

属性通常提供不属于数据组成部分的信息。在下面的实例中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:

  1. <file type="gif">computer.gif</file>

XML 元素 vs. 属性

例子:

  1. <person sex="female">
  2. <firstname>Anna</firstname>
  3. <lastname>Smith</lastname>
  4. </person>

  1. <person>
  2. <sex>female</sex>
  3. <firstname>Anna</firstname>
  4. <lastname>Smith</lastname>
  5. </person>

在第一个实例中,sex 是一个属性。在第二个实例中,sex 是一个元素。这两个实例都提供相同的信息。

没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。

尽量描述详细

  1. 第一个实例中使用了 date 属性:
  2. <note date="10/01/2008">
  3. <to>Tove</to>
  4. <from>Jani</from>
  5. <heading>Reminder</heading>
  6. <body>Don't forget me this weekend!</body>
  7. </note>
  8.  
  9. 第二个实例中使用了 date 元素:
  10. <note>
  11. <date>10/01/2008</date>
  12. <to>Tove</to>
  13. <from>Jani</from>
  14. <heading>Reminder</heading>
  15. <body>Don't forget me this weekend!</body>
  16. </note>
  17.  
  18. 第三个实例中使用了扩展的 date 元素(这个最好):
  19. <note>
  20. <date>
  21. <day>10</day>
  22. <month>01</month>
  23. <year>2008</year>
  24. </date>
  25. <to>Tove</to>
  26. <from>Jani</from>
  27. <heading>Reminder</heading>
  28. <body>Don't forget me this weekend!</body>
  29. </note>

避免 XML 属性?

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

  属性不能包含多个值(元素可以)

  属性不能包含树结构(元素可以)

  属性不容易扩展(为未来的变化)

属性难以阅读和维护。请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息

针对元数据的 XML 属性

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

  1. <messages>
  2. <note id="501">
  3. <to>Tove</to>
  4. <from>Jani</from>
  5. <heading>Reminder</heading>
  6. <body>Don't forget me this weekend!</body>
  7. </note>
  8. <note id="502">
  9. <to>Jani</to>
  10. <from>Tove</from>
  11. <heading>Re: Reminder</heading>
  12. <body>I will not</body>
  13. </note>
  14. </messages>

上面的 id 属性仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。

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

XML验证

拥有正确语法的 XML 被称为"形式良好"的 XML。

通过 DTD 验证的XML是"合法"的 XML。

"形式良好"的 XML 文档拥有正确的语法:

  XML 文档必须有一个根元素

  XML元素都必须有一个关闭标签

  XML 标签对大小写敏感

  XML 元素必须被正确的嵌套

  XML 属性值必须加引号

验证 XML 文档

合法的 XML 文档的前提必须是"形式良好"的 XML 文档,这也符合文档类型定义(DTD)的规则:

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <!DOCTYPE note SYSTEM "Note.dtd">
  3. <note>
  4. <to>Tove</to>
  5. <from>Jani</from>
  6. <heading>Reminder</heading>
  7. <body>Don't forget me this weekend!</body>
  8. </note>

DTD
DTD 的目的是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:

  1. <!DOCTYPE note
  2. [
  3. <!ELEMENT note (to,from,heading,body)>
  4. <!ELEMENT to (#PCDATA)>
  5. <!ELEMENT from (#PCDATA)>
  6. <!ELEMENT heading (#PCDATA)>
  7. <!ELEMENT body (#PCDATA)>
  8. ]>

Schema

W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema:

  1. <xs:element name="note">
  2.  
  3. <xs:complexType>
  4. <xs:sequence>
  5. <xs:element name="to" type="xs:string"/>
  6. <xs:element name="from" type="xs:string"/>
  7. <xs:element name="heading" type="xs:string"/>
  8. <xs:element name="body" type="xs:string"/>
  9. </xs:sequence>
  10. </xs:complexType>
  11.  
  12. </xs:element>

XML查看

在所有主流的浏览器中,均能够查看原始的 XML 文件。

不要指望 XML 文件会直接显示为 HTML 页面。

为什么 XML 显示这个样子?

  XML 文档不会携带有关如何显示数据的信息。

  由于 XML 标签由 XML 文档的作者"发明",浏览器无法确定像 <table> 这样一个标签究竟描述一个 HTML 表格还是一个餐桌。

  在没有任何有关如何显示数据的信息的情况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。

XML CSS

通过使用 CSS(Cascading Style Sheets 层叠样式表),可以添加显示信息到 XML 文档中。

使用 CSS 来格式化 XML 文档是有可能的

未使用CSS的XML:

针对该xml做一个css文件:

加入了CSS样式后的XML的显示:

下面是 XML 文件的一小部分。第二行把 XML 文件链接到 CSS 文件:

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <?xml-stylesheet type="text/css" href="cd_catalog.css"?>
  3. <CATALOG>
  4. <CD>
  5. <TITLE>Empire Burlesque</TITLE>
  6. <ARTIST>Bob Dylan</ARTIST>
  7. <COUNTRY>USA</COUNTRY>
  8. <COMPANY>Columbia</COMPANY>
  9. <PRICE>10.90</PRICE>
  10. <YEAR>1985</YEAR>
  11. </CD>
  12. <CD>
  13. <TITLE>Hide your heart</TITLE>
  14. <ARTIST>Bonnie Tyler</ARTIST>
  15. <COUNTRY>UK</COUNTRY>
  16. <COMPANY>CBS Records</COMPANY>
  17. <PRICE>9.90</PRICE>
  18. <YEAR>1988</YEAR>
  19. </CD>
  20. .
  21. .
  22. .
  23. </CATALOG>

虽然说使用 CSS 是可以格式化 XML,但这不是常用的方法。W3C 推荐使用 XSLT

使用 XSLT 显示 XML

通过使用 XSLT,可以把 XML 文档转换成 HTML 格式

XSLT 是首选的 XML 样式表语言。

XSLT(eXtensible Stylesheet Language Transformations)远比 CSS 更加完善。

XSLT 是在浏览器显示 XML 文件之前,先把它转换为 HTML

在服务器上通过 XSLT 转换 XML

在上面的实例中,当浏览器读取 XML 文件时,XSLT 转换是由浏览器完成的。

在使用 XSLT 来转换 XML 时,不同的浏览器可能会产生不同结果。为了减少这种问题,可以在服务器上进行 XSLT 转换

XML 入门的更多相关文章

  1. sql xml 入门

    /*sql xml 入门:    --by jinjazz    --http://blog.csdn.net/jinjazz        1.xml:        能认识元素.属性和值      ...

  2. xml入门简介--两天学会xml

    前言 在很久以前,笔者曾见到过1000+页的xml书,里面还有n多的概念,XSL,Xquery,让人头痛.无奈最近需要用到,所以在w3c恶补了一下.以下大致整理了一下相关概念,但是对XSL等派生语言没 ...

  3. XML学习总结(二)——XML入门

    XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...

  4. xml入门与解析

    xml入门与解析 1.xml基础知识 xml:可扩展的标签语言,标签自定义. 作用:存储数据.(配置文件) 书写规范: 1.区分大小写 2.应该有一个根标签 3.标签必须关闭 <xx>&l ...

  5. XML 入门 - XML 系统教程(1)

    XML (Extensible Markup Language)指可扩展标记语言. 组成 <?xml version="1.0" encoding="UTF-8&q ...

  6. XML入门介绍

    目录 XML 简介 xml 语法 文档声明 (1)创建一个 xml 文件 (2)图书有 id 性 属性 一 表示唯一 标识,书名,有作者,价格的信息 xml 注释 元素(标签) 1)什么是 xml 元 ...

  7. xml入门

    1.why xml? 如果说JSON是一种轻量级的数据交换格式,那么xml就是重量级的.xml应用于web开发的许多方面,常用于简化数据的存储和共享.永远要记住,xml跟JSON一样是用来存储和传输数 ...

  8. XMl入门介绍及php操作XML

    一.什么是XML XML全称:Extensible Markup Language 中文名:可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,允许用户对自己的标 ...

  9. Javaweb入门20160301 ---xml入门

    一.xml语法 1.文档声明 用来声明xml的基本属性,用来指挥解析引擎如何去解析当前xml 通常一个xml都要包含并且只能包含一个文档声明 xml的文档必须在整个xml的最前面,在文档声明之前不能有 ...

  10. FusionCharts xml入门教程

    由于项目需求需要做一个报表,选择FusionCharts作为工具使用.由于以 前没有接触过报表,网上也没有比较详细的fusionCharts教程,所以决定好好研究FusionCharts,同时做一个比 ...

随机推荐

  1. Hadoop本地库介绍及相关问题解决方法汇总

    1.hadoop本地库的作用是什么?2.哪两个压缩编码器必须使用hadoop本地库才能运行?3.hadoop的使用方法?4.hadoop本地库与系统版本不一致会引起什么错误?5.$ export HA ...

  2. man手册查找ascii码和运算符优先级

    1.man手册可以输出ascii码表 man   ascii 2.man手册还可以输出运算符的优先级 man operator

  3. 《Android源代码设计模式解析与实战》读书笔记(二十)

    第二十章.适配器模式 适配器模式是结构型设计模式之中的一个,它在我们的开发中使用率极高,比方ListView.GridView以及RecyclerView都须要使用Adapter. 1.定义 适配器模 ...

  4. Django:Django Rest Framework

    Django Rest Framework   一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称 ...

  5. linux-CentOS6.4安装Memcached+memcached扩展+安装memcache扩展+Memcache+mecached同步SESSION的几种方法

    一.编译环境的准备 yum install gcc  yum install gcc-c++ libstdc++-devel  yum install zlib-devel 二.源代码包准备 wget ...

  6. SourceInsight-查看java中接口对应的实现类

    1.双击选中需要查看的接口名称,然后右击选择“Show in Relation Window” 2.然后在右侧会弹出一个Relation的窗口 如果没有列出对应的实现类,可以在接口名上再次右击,依次选 ...

  7. tornado cookie安全性

    1.cookie伪造客户端javascript或浏览器插件可以修改cookie网络传输中也可以截获请求,修改cookie 2.tornado cookie安全验证机制tornado的set_secur ...

  8. 每日英语:Mooncake Austerity Hits China's Mid-Autumn Festival

    First baijiu, then red carpets, and now mooncakes. For Chinese government officials, the list of tab ...

  9. Python 并行分布式框架 Celery

    Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分 ...

  10. C++报错集锦

    (一)invalid initialization of non-const reference of type 'float&' from a temporary of type 'floa ...