前言

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

XML简介

XML语法

Xml验证

查看xml

xml转化为html

xml解析器

工具

xml相关概念

参考文章

 

XML简介

XML 指可扩展标记语言

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

XML 与 HTML 的主要差异

XML 不是 HTML 的替代

XML 和 HTML 为不同的目的而设计:

XML 被设计为传输和存储数据,其焦点是数据的内容。

HTML 被设计用来显示数据,其焦点是数据的外观。

什么是 XML?

XML 指可扩展标记语言(EXtensible Markup Language)

XML 是一种标记语言,很类似 HTML

XML 的设计宗旨是传输数据,而非显示数据

XML 标签没有被预定义。您需要自行定义标签。

XML 被设计为具有自我描述性(简单地说就是XML以树形结构展开,通过元素、子元素和属性描述,让人一看就懂)。

XML 是 W3C 的推荐标准

我觉得初学者可能会走近的误区:

1. XML是不是HTML的取代者

不是。写得好的html应该是一个well-formed的xml文档,其他方面最好不要把他们放在一个水平线上比较

2. XML是不是数据库的取代者

不是。

3. XML是不是...的取代者

都不是。

  这个结论可能听上去很滑稽:XML是非常非常重要的东西,但它什么都取代不了。

  但这并不奇怪,有人把它比做ASCII标准,他们是一切一切的基础,但并没有(也不需要)取代什么。(但是就如同ASCII取代了一些没有成大器的字符集定义,

  XML也会取代你在应用中自己定义的一些数据传输规范,但没有什么特别主流的东西。)

  刚开始学XML(或者说没开始学之前)的时候最爱问的一个问题肯定是:使用XML能给我带来什么好处?

  我觉得从某种角度上说,使用XML有些象使用OO面向对象:

  -你可以用它,你也可以不用它。

  -如果你的应用非常简单,用它不一定方便,没准儿用了效果还会更差。

  -和其他实际东西比如数据库,MTS,Web Server比起来,它更像是一个概念,一种方法

  -项目越大,它的发挥余地越大,作用越大。

  -一旦真正理解后,哪怕不用xml parser,也不妨碍你使用这个概念,如同可以抛开特定语言使用OO。

  - ......

XML的作用

作为一种通用的数据表示方法,用于数据的传输和存储

xml有全套的操作这种结构的方法

XSD,XSL,解析器,Xquery:数据查询(及语句)

定义派生标签语言:怎么定义,给出检验方法吗?另外就是怎么学习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 标签对大小写敏感

XML 文档必须有根元素

XML 的属性值须加引号

层级结构:数据的种类可以参考json,无非是数组和对象,同样可以用编译原理中的递归定义来定义xml。在xml中,用标签名相同的兄弟元素表示数组,用标签名不同的兄弟元素表示对象的成员,从而表示了对象。

Xml元素的标签名表示对象的类型(描述这个对象是什么)

XML 元素 vs. 属性

<person sex="female">

<firstname>Anna</firstname>

<lastname>Smith</lastname>

</person>

<person>

<sex>female</sex>

<firstname>Anna</firstname>

<lastname>Smith</lastname>

</person>

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

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

属性无法包含多重的值(元素可以)

属性无法描述树结构(元素可以)

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

属性难以阅读和维护

元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

常用属性:id,name,xmlns

--------------------------------------------xml“高级”语法------------------------------------------------------

命名空间:它的作用是防止命名冲突,可想而知,在日常的数据表示中用得不多。但在一些通用的语言定义中会用到,如xsl。

<h:table xmlns:h="http://www.w3.org/TR/html4/">

<h:tr>

<h:td>Apples</h:td>

<h:td>Bananas</h:td>

</h:tr>

</h:table>

在某个标签块中用属性xmlns声明命名空间,如<h:table xmlns:h="http://www.w3.org/TR/html4/">,则在整个块中都可以使用该命名空间。声明的内容是指向一个描述该命名空间的URL。

CDATA:在一个块内,用<![CDATA[ ……]]>把内容包住,使在该块中可以不用xml实体。可见这个东西不太常用,主要在定义的语言中可能用到。

<script>

<![CDATA[

function matchwo(a,b)

{

if (a < b && a < 0) then

{

return 1;

}

else

{

return 0;

}

}

]]>

</script>

XML 声明:如<?xml version="1.0" encoding="ISO-8859-1"?>,它不满足xml语法,不属于xml的部分。

编码属性(encoding)应当被指定为文档被保存时所使用的编码。我最好的避免错误的建议是:

使用支持编码的编辑器

确定编辑器使用的编码

在您的 XML 文档中使用相同的编码属性

Xml验证

合法的 XML 文档是“形式良好”(符合一般的xml语法规则)的 XML 文档,同样遵守文档类型定义 (DTD) 的语法规则:

***Note.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE note SYSTEM "Note.dtd">

<note>

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body>Don't forget the meeting!</body>

</note>

***Note.dtd

<!DOCTYPE note [

<!ELEMENT note (to,from,heading,body)>

<!ELEMENT to      (#PCDATA)>

<!ELEMENT from    (#PCDATA)>

<!ELEMENT heading (#PCDATA)>

<!ELEMENT body    (#PCDATA)>

]>

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

<xs:element name="note">

<xs:complexType>

<xs:sequence>

<xs:element name="to"      type="xs:string"/>

<xs:element name="from"    type="xs:string"/>

<xs:element name="heading" type="xs:string"/>

<xs:element name="body"    type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>

查看xml

Xml也能在浏览器中显示(放在链接里),可见这个主题并不常用。

但是显示方案有一定的浏览器差异性,当xml有语法错误时,浏览器还会报错

解决方案1:用css定制样式

***cd.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<?xml-stylesheet type="text/css" href="cd_catalog.css"?>

<CATALOG>

<CD>

<TITLE>Empire Burlesque</TITLE>

<ARTIST>Bob Dylan</ARTIST>

<COUNTRY>USA</COUNTRY>

<COMPANY>Columbia</COMPANY>

<PRICE>10.90</PRICE>

<YEAR>1985</YEAR>

</CD>

</CATALOG>

***cd_catalog.css

CATALOG

{

background-color: #ffffff;

width: 100%;

}

CD

{

display: block;

margin-bottom: 30pt;

margin-left: 0;

}

TITLE

{

color: #FF0000;

font-size: 20pt;

}

ARTIST

{

color: #0000FF;

font-size: 20pt;

}

COUNTRY,PRICE,YEAR,COMPANY

{

display: block;

color: #000000;

margin-left: 20pt;

}

很容易看懂,本来就有自定义的html标签

CSS 格式化 XML 不是常用的方法,更不能代表 XML 文档样式化的未来。W3C 推荐使用 XSLT。

解决方案2:XSLT, 是首选的 XML 样式表语言。

***breakfast.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<?xml-stylesheet type="text/xsl" href="simple.xsl"?>

<breakfast_menu>

<food>

<name>Belgian Waffles</name>

<price>$5.95</price>

<description>

two of our famous Belgian Waffles

</description>

<calories>650</calories>

</food>

</breakfast_menu>

***simple.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Edited with XML Spy v2007 (http://www.altova.com) -->

<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">

<body style="font-family:Arial,helvetica,sans-serif;font-size:12pt;

background-color:#EEEEEE">

<xsl:for-each select="breakfast_menu/food">

<div style="background-color:teal;color:white;padding:4px">

<span style="font-weight:bold;color:white">

<xsl:value-of select="name"/></span>

- <xsl:value-of select="price"/>

</div>

<div style="margin-left:20px;margin-bottom:1em;font-size:10pt">

<xsl:value-of select="description"/>

<span style="font-style:italic">

(<xsl:value-of select="calories"/> calories per serving)

</span>

</div>

</xsl:for-each>

</body>

</html>

用过html模板后就觉得这不难看懂,主要是一些标签替换

XSLT 的原理是是在浏览器显示 XML 文件之前,先把它转换为 HTML。由于XSLT 转换是由浏览器完成的,所以减少了浏览器差异性问题。

xml转化为html

相关的xslt库

先转化为dom对象,再用程序完成

xml解析器

xml解析器会把把XML(文件或字符串)转换为XML DOM对象

什么是dom对象,怎么转换,看看js就知道了。

xml文档的读取有跨域问题

php与xml

php通过header("Content-type:text/xml");可以用echo向浏览器发送xml。

要用程序把数据库数据转换成xml,要自己写一些代码

工具

Xml验证器:http://www.w3school.com.cn/xml/xml_validator.asp

概念

XML 声明:如<?xml version="1.0" encoding="ISO-8859-1"?>

CDATA:在一个块内,用<![CDATA[ ……]]>把内容包住,使在该块中可以不用xml实体。

DTD:文档类型定义 (document type definition)

XSD(XML Schema Definition):即XML Schema ,是W3C 支持一种DTD代替者,它的语法基于XML 。

XSL :指扩展样式表语言(EXtensible Stylesheet Language),它的初衷是给xml提供样式显示。由XSLT、XPath 以及 XSL-FO组成。XSLT的主旨更一般化,指可将一种 XML 文档转换为另外一种 XML 文档。口头中,常把XSLT称为XLS。

XSLT:指 XSL 转换(XSL Transformations), 可将一种 XML 文档转换为另外一种 XML 文档,其中一种特例是把XML转换成HTML输出。

Xpath:Xpath是一门在 XML 文档中查找信息的语言,在 XML 文档中通过元素和属性进行导航。 XSLT使用 XPath 在 XML 文档中进行导航,在XSLT中,除开导航,就只剩下怎么替换的问题了。

Xquery:一种xml的查询语言,Xquery之于xml就像sql之于数据库。XQuery是基于XPath上的,单独的 XPath 位置路径本身就是有效的 Xquery。

 

参考文章

w3c:http://www.w3school.com.cn/xml/xml_syntax.asp

XML入门之十一问答

http://developer.51cto.com/art/200512/15385.htm

通过PHP操作XML入门

http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2009/0421/2884.html

XML是什么,它可以做什么?——写给XML入门者 :

http://blog.csdn.net/cds27/article/details/743409

XML是什么,它可以做什么:http://blog.sina.com.cn/s/blog_5c012cc00100cehm.html

给xml的初学者

http://www.why.com.cn/epublish/node625/node1202/node1209/userobject7ai12694.html

相关技术http://www.w3school.com.cn/xml/xml_technologies.asp

xml入门简介--两天学会xml的更多相关文章

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

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

  2. XML入门介绍(什么是XML及XML格式)

    什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language). XML 是一种很像HTML的标记语言. XML 的设计宗旨是传输数据,而不是显示数据. XML 标 ...

  3. XML入门介绍

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

  4. sql xml 入门

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

  5. [安卓]AndroidManifest.xml文件简介及结构

    1.AndroidManifest.xml文件简介: 每个应用程序在它的根目录中都必须要有一个AndroidManifest.xml(名字须精确一致)文件.这个清单把应用程序的基本信息提交给Andro ...

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

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

  7. maven入门(1-2)settings.xml

    一.简介 settings.xml对于maven来说相当于全局性的配置,用于所有的项目, 当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时, ...

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

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

  9. xml入门与解析

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

随机推荐

  1. TOJ3596 二维背包

    3596.   Watch The Movie Time Limit: 2.0 Seconds   Memory Limit: 65536KTotal Runs: 424   Accepted Run ...

  2. 头文件 .h 与源文件 .ccp 的区别

    .h 文件一般是用来定义的,比如定义函数.类.结构体等: .cpp 文件则是对头文件的定义进行实现. include .h文件,可以调用你声明的函数.类等.当然,比较简单的类.函数,你也可以直接在头文 ...

  3. 【译】神经网络与深度学习 Ch1-Section0

    用神经网络识别手写数字 人类的视觉系统是是大自然的奇迹.考虑下面手写数字序列: 大多数人能够轻易地是识别出是504192.在我们大脑的每个半球都有一个基础的皮质,这就是我们熟知的V1区,它包含了14亿 ...

  4. ubuntu中安装openssh-server失败(首先ubuntu不能远程root登录)

      ubuntu 安装openssh-server时,报依赖错误   解决方法: 更新软件 sudo apt-get update   如果报校验和不符错误:(此错误为部分网址被墙)如图 解决方法如下 ...

  5. 图片自动转换效果 jquery

    http://www.16sucai.com/uploadfile/show5/switchable01/switchable/ <div class="maxpSlid" ...

  6. Android开发重修

    Android程序开发的重新学习 #####Mars课程学习笔记20140926 1.Service主要用于完成耗时较长的操作,没有图形化界面. 2.Content Provider数据的提供者,是A ...

  7. php 实时推送代码

    网站质量不错的网站可以在百度站长平台/数据提交/sitemap栏目下看到实时推送的功能, 目前这个工具是邀请开放, 百度的实时推送的api接口可以实时推送我们新发布的文章, 保证百度在第一时间收录. ...

  8. 字典:当索引不好用时 - 零基础入门学习Python025

    字典:当索引不好用时 让编程改变世界 Change the world by program 有天你想翻开牛津字典,查找"sadomasochism[ˌseɪdoʊ'mæsəkɪzəm]&q ...

  9. 启动安卓模拟器报错 emulator: ERROR: x86_64 emulation currently requires hardware acceleration! CPU acceleration status:HAXM must be updated(version 1.1.1<6.0.1) 解决办法

    启动安卓模拟器报错 emulator: ERROR: x86_64 emulation currently requires hardware acceleration!  CPU accelerat ...

  10. PowerShell官方的MSDN

    https://msdn.microsoft.com/en-us/powershell/mt173057.aspx 官方还咋github上放置了  扩展模块. 比如 web iis部署.sqlserv ...