xml入门简介--两天学会xml
前言
在很久以前,笔者曾见到过1000+页的xml书,里面还有n多的概念,XSL,Xquery,让人头痛。无奈最近需要用到,所以在w3c恶补了一下。以下大致整理了一下相关概念,但是对XSL等派生语言没有详细的展开。
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的更多相关文章
- XMl入门介绍及php操作XML
一.什么是XML XML全称:Extensible Markup Language 中文名:可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,允许用户对自己的标 ...
- XML入门介绍(什么是XML及XML格式)
什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language). XML 是一种很像HTML的标记语言. XML 的设计宗旨是传输数据,而不是显示数据. XML 标 ...
- XML入门介绍
目录 XML 简介 xml 语法 文档声明 (1)创建一个 xml 文件 (2)图书有 id 性 属性 一 表示唯一 标识,书名,有作者,价格的信息 xml 注释 元素(标签) 1)什么是 xml 元 ...
- sql xml 入门
/*sql xml 入门: --by jinjazz --http://blog.csdn.net/jinjazz 1.xml: 能认识元素.属性和值 ...
- [安卓]AndroidManifest.xml文件简介及结构
1.AndroidManifest.xml文件简介: 每个应用程序在它的根目录中都必须要有一个AndroidManifest.xml(名字须精确一致)文件.这个清单把应用程序的基本信息提交给Andro ...
- XML学习总结(二)——XML入门
XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...
- maven入门(1-2)settings.xml
一.简介 settings.xml对于maven来说相当于全局性的配置,用于所有的项目, 当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时, ...
- ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介
ROS 提高篇 之 Launch 深入研究 - 01 - 启动文件的编程 - ROS 的 XML语法简介 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubu ...
- xml入门与解析
xml入门与解析 1.xml基础知识 xml:可扩展的标签语言,标签自定义. 作用:存储数据.(配置文件) 书写规范: 1.区分大小写 2.应该有一个根标签 3.标签必须关闭 <xx>&l ...
随机推荐
- Asp.Net HttpApplication请求管道与Session(一)
1.请求处理顺序执行事件 /********************请求处理顺序执行事件**********************/ /// <summary> /// 请求入站 /// ...
- Jquery:Jquery中的事件<一>
由于今天有一个比较重要的面试,所以昨天晚上对以前做的一些项目做了一下总结,直接导致昨天的学习笔记断更了,哎,计划永远赶不上变化啊!今天学习了Jquery中是事件,就此做一个笔记,便于日后复习. 一.加 ...
- RAID磁盘阵列原理
磁盘阵列(Redundant Arrays of independent Disks,RAID),有“价格便宜具有冗余能力的磁盘阵列”之意.原理是利用数组方式来作磁盘组,配合数据分散排列的设计,提升数 ...
- jquery操作iframe
query取得iframe中元素的几种方法 在iframe子页面获取父页面元素 代码如下: $('#objId', parent.document); // 搞定... 在父页面 获取iframe子页 ...
- 1、工程log4j 配置
### set log levels ### log4j.rootLogger = debug,stdout,R ### 输出到控制台 ### log4j.appender.stdout = org. ...
- UWP开发小记
针对个人的上一篇文章中提到的遇到的几个问题,做一下个人解答 DLL部署的问题,可以将DLL添加到工程中,属性中设置content为true,这样,部署目录下就会有这个文件. 需要说明的是,这个文件确实 ...
- 百度UEditor编辑器关闭抓取远程图片功能(默认开启)
这个坑娘的功能,开始时居然不知道如何触发,以为有个按钮,点击一下触发,翻阅了文档,没有发现,然后再网络上看到原来是复制粘贴非白名单内的图片到编辑框时触发,坑娘啊............... 问题又来 ...
- shopnc怎么开启伪静态 shopnc开启伪静态的方法
最近要给一个shopnc网站开启伪静态,用的是shopnc b2b2c,在网上搜索了好多shopnc开启伪静态的方法,但都是针对shaopnc c2c的,没有关于shopnc b2b2c的,最后终于找 ...
- Scala学习文档-列表的使用
注:列表是不可变的,不能通过赋值改变列表的元素 列表具有递归结构,数组是连续的 scala里的列表类型是协变的? --> scala中的逆变与协变 分治原则 //自定义实现:::操作符 def ...
- 利用Azure高级存储搭建高性能Linux服务器(2)
我们首先来测试随机写的IOPS,可以看到随机写的IOPS可以达到,顺序写的IOPS可以达到: $ sudo fio -filename=/data/testfile -direct=1 -iodept ...