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

前言

  在很久以前,笔者曾见到过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

posted @ 2013-09-04 11:30  浅井光一  阅读(1487)  评论(0编辑  收藏  举报