zoukankan      html  css  js  c++  java
  • 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;

    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

  • 相关阅读:
    ADC测试matlab代码
    matlab的滤波器仿真——低通滤波器与插值滤波器
    PDF转Image最终方案
    多线程和蕃茄炒蛋
    git学习总结
    踩坑了,当前目录问题
    Angular 1.x 升级到 Angular 2
    打造AngularJs2.0开发环境
    发布一个自用的ansi转utf8程序
    用itextsharp打印pdf示例
  • 原文地址:https://www.cnblogs.com/deliver/p/3300634.html
Copyright © 2011-2022 走看看