新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论XSL,XSLT,XSL-FO,CSS等技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XSL/XSLT/XSL-FO/CSS 』 → XSL 简 明 教 程(上) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 22625 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: XSL 简 明 教 程(上) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     anchen0617 帅哥哟,离线,有人找我吗?双子座1983-6-17
      
      
      威望:5
      等级:大二(研究C++)
      文章:281
      积分:3413
      门派:XML.ORG.CN
      注册:2004/10/17

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给anchen0617发送一个短消息 把anchen0617加入好友 查看anchen0617的个人资料 搜索anchen0617在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问anchen0617的主页 引用回复这个贴子 回复这个贴子 查看anchen0617的博客楼主
    发贴心情 XSL 简 明 教 程(上)

    一 .XSL 入 门 章 节 导 航

      1.XSL---XML 的样式表

    HTML 网页使用预先确定的标识 (tags) ,这就是说所有的标记都有明确的含义,例如 <p> 是另起一行 <h1> 是标题字体。所有的浏览器都知道如何解析和显示 HTML 网页。
    然而, XML 没有固定的标识 , 我们可以建立我们自己需要的标识,所以浏览 器不能 自动解析它们,例如 <table> 可以理解为表格,也可以理解为桌子。由于 XML 的可扩展性,使我们没有一个标准的办法来显示 XML 文档。
    为了控制 XML 文档的显示,我们有必要建立一种机制, CSS 就是其中的一种,但是 XSL( eXtensible Stylesheet Language) 是显示 XML 文档的首选样式语言,它比 CSS 更适合于 XML 。

    2.XSL --- 不仅仅是一种样式表

    XSL 由两部分组成:

    一是转化 XML 文档;二是格式化 XML 文档。

    如果你不理解这个意思,可以这样想: XSL 是一种可以将 XML 转化成 HTML 的语言,一种可以过滤和选择 XML 数据的语言,一种能够格式化 XML 数据的语言。 ( 比如用红色显示负数。 )

    3.XSL --- 它能做什么?

    XSL 可以被用来定义 XML 文档如何显示,可以将 XML 文档转换成能被浏览器识别的 HTML 文件,通常的, XSL 是通过将每一个 XML 元素 " 翻译 " 为 HTML 元素,来实现这种转换的。

    XSL 能够向输出文件里添加新的元素,或则移动元素。 XSL 也能够重新排列或者索引数据,它可以检测并决定哪些元素 被显示 ,显示多少。

    4.XSL 在 IE5 中的显示

    注意: IE5.0 中,并不能完全兼容 W3C 组织发布的最新 XSL 标准。因为 IE5.0 是在 XSL 标准最终确定以前发布的。微软已经承诺在 IE5.5 中修正。


    一 .XSL 入 门

    二 .XSL的转换

    三 .XSL--在客户端的实现

    四 .XSL --- 在服务器端的实现


    五 . XSL 的索引

    六 . XSL的过滤和查询

    七 . XSL 的控制语句

    二 .XSL的转换  章 节 导 航
    1.将XML转换成HTML

    XSL是如何将XML文档转换成HTML文件的呢?我们来看一个例子,下面是XML文档的一部分:

    <?xml version="1.0" encoding="ISO8859-1" ?>

    <CATALOG>

    <CD>

    <TITLE>Empire Burlesque</TITLE>

    <ARTIST>Bob Dylan</ARTIST>

    <COUNTRY> USA </COUNTRY>

    <COMPANY> Columbia </COMPANY>

    <PRICE>10.90</PRICE>

    <YEAR>1985</YEAR>

    </CD>

    ...

    然后我们将下面的 XSL文件作为HTML的模板将XML数据转换为HTML文件:

    <?xml version='1.0'?>

    < xsl:stylesheet xmlns:xsl ="http://www.w3.org/TR/WD-xsl">

    < xsl:template match="/">

    <html>

    <body>

    <table border="2" bgcolor ="yellow">

    < tr >

    < th >Title</ th >

    < th >Artist</ th >

    </ tr >

    < xsl:for -each select="CATALOG/CD">

    < tr >

    <td>< xsl:value -of select="TITLE"/></td>

    <td>< xsl:value -of select="ARTIST"/></td>

    </ tr >

    </ xsl:for -each>

    </table>

    </body>

    </html>

    </ xsl:template >

    </ xsl:stylesheet >

    在上面的代码中, xsl:for -each元素的作用是定位XML文档中的哪些元素需要按以下模板显示。select属性用来定义源文件中的元素名。指定属性的这种语法又称为XML
    Pattern(模式),类似文件子目录的表示形式。 xsl:value -of元素用来在当前层次中插入子元素的内容模板。

    因为XSL样式表自身也是一个XML文档,因此,XSL文件的开头以一个XML声明开始。 xsl:stylesheet 元素用来声明这是一个样式表文件。< xsl:template
    match="/">语句表示XML的源文档在当前目录下。

    如果为XML文档加上XSL样式表,看下面代码第2行,你的浏览器就可以精确的将XML 文档转换为HTML文件。

    <?xml version="1.0" encoding="ISO8859-1" ?>

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

    <CATALOG>

    <CD>

    <TITLE>Empire Burlesque</TITLE>

    <ARTIST>Bob Dylan</ARTIST>

    <COUNTRY> USA </COUNTRY>

    <COMPANY> Columbia </COMPANY>

    <PRICE>10.90</PRICE>

    <YEAR>1985</YEAR>

    </CD>


    一 .XSL 入 门

    二 .XSL的转换

    三 .XSL--在客户端的实现

    四 .XSL --- 在服务器端的实现


    五 . XSL 的索引

    六 . XSL的过滤和查询

    七 . XSL 的控制语句

    三 . XSL--在客户端的实现   
    1.JavaScript解决方案

    在上面的章节中我们已经解释了XSL是如何将XML转换成HTML文件。方法就是在XML文档的头部加入一个XSL样式 表信息 ,然后让浏览 器执行 转换过程。

    这种方法在大部分情况下都做得很好,但是在不支持XML的浏览器中就无法正确显示了。

    一个更好的更全面的解决方案是使用 Javascript 来实现XML到HTML的转换。但是使用JavaScript必须得到以下功能支持:

    a.允许 Javascript 代替浏览器进行细节检测;

    b.根据不同的需要和不同的浏览器使用不同的样式表。

    对于XSL来说这是完全可行的。设计XSL的目标之一就是允许将一种格式转换成另一种格式,支持不同的浏览器,支持不同的用户需求。未来的浏览器的重要任务就是在客户端执行XSL的转换工作。

    2.一个具体的实例

    下面是我们上面提到的一个XML文档( cd_catalog.xml )例子的部分代码:

    <?xml version="1.0" encoding="ISO8859-1" ?>

    <CATALOG>

    <CD>

    <TITLE>Empire Burlesque</TITLE>

    <ARTIST>Bob Dylan</ARTIST>

    <COUNTRY> USA </COUNTRY>

    <COMPANY> Columbia </COMPANY>

    <PRICE>10.90</PRICE>

    <YEAR>1985</YEAR>

    </CD>

    .

    .

    .

    下面是完整的XSL文件( cd_catalog.xsl ):

    <?xml version='1.0'?>

    < xsl:stylesheet xmlns:xsl ="http://www.w3.org/TR/WD-xsl">

    < xsl:template match="/">

    <html>

    <body>

    <table border="2" bgcolor ="yellow">

    < tr >

    < th >Title</ th >

    < th >Artist</ th >

    </ tr >

    < xsl:for -each select="CATALOG/CD">

    < tr >

    <td>< xsl:value -of select="TITLE"/></td>

    <td>< xsl:value -of select="ARTIST"/></td>

    </ tr >

    </ xsl:for -each>

    </table>

    </body>

    </html>

    </ xsl:template >

    </ xsl:stylesheet >

    注意,现在 XML文件还没有加入XSL样式表,还没有被转换成HTML文件。

    下面是用 JavaSript 来实现最后转换的HTML代码:

    < html >

    <body>

    <script language=" javascript ">

    // Load XML

    var xml = new ActiveXObject (" Microsoft.XMLDOM ")

    xml.async = false

    xml.load (" cd_catalog.xml ")

    // Load the XSL

    var xsl = new ActiveXObject ( " Microsoft.XMLDOM ")

    xsl.async = false

    xsl.load (" cd_catalog.xsl ")

    // Transform

    document.write ( xml.transformNode ( xsl ))

    </script>

    </body>

    </html>

    上面代码中使用了 Javascript ,如果你不知道如何写 JavaScript,您最好专门学习一下。

    第一段代码建立一个Microsoft Parser(XMLDOM)解析的对象,并将XML文档读入内存;第二段代码建立另外一个对象并导入XSL文档;最后一行代码将XML文档用XSL文档转换,并将结果输出到HTML文件中。




    四 : XSL --- 在服务器端的实现   
    1.兼容所有的浏览器

    在上面一章我们介绍了可以通过JavaScript调用浏览器的XML parser(解析软件)来转换XML文档。但是这个方案依然有个问题:如果浏览器没有XML
    parser插件怎么办?(注:IE5内自带XML parser)

    为了使我们的XML数据能被所有的浏览 器正确 显示,我们不得不在 服务器端将 XML转换成纯HTML代码,再输出给浏览器。

    这也是使用XSL的另一个好处。在 服务器端将一种 格式转换为另一种格式也是XSL的设计目标之一。

    同样,转换工作也将成为未来服务器段的主要工作。

    2.一个具体实例

    下面是我们上面提到的一个XML文档( cd_catalog.xml )例子的部分代码:

    <?xml version="1.0" encoding="ISO8859-1" ?>

    <CATALOG>

    <CD>

    <TITLE>Empire Burlesque</TITLE>

    <ARTIST>Bob Dylan</ARTIST>

    <COUNTRY> USA </COUNTRY>

    <COMPANY> Columbia </COMPANY>

    <PRICE>10.90</PRICE>

    <YEAR>1985</YEAR>

    </CD>

    .

    .

    .

    下面是完整的 XSL文件( cd_catalog.xsl ):

    <?xml version='1.0'?>

    < xsl:stylesheet xmlns:xsl ="http://www.w3.org/TR/WD-xsl">

    < xsl:template match="/">

    <html>

    <body>

    <table border="2" bgcolor ="yellow">

    < tr >

    < th >Title</ th >

    < th >Artist</ th >

    </ tr >

    < xsl:for -each select="CATALOG/CD">

    < tr >

    <td>< xsl:value -of select="TITLE"/></td>

    <td>< xsl:value -of select="ARTIST"/></td>

    </ tr >

    </ xsl:for -each>

    </table>

    </body>

    </html>

    </ xsl:template >

    </ xsl:stylesheet >

    下面是在服务器端转换 XML文件为HTML文件的原代码:

    <%

    'Load the XML

    set xml = Server.CreateObject ( " Microsoft.XMLDOM ")

    xml.async = false

    xml.load ( Server.MapPath (" cd_catalog.xml "))

    'Load the XSL

    set xsl = Server.CreateObject ( " Microsoft.XMLDOM ")

    xsl.async = false

    xsl.load ( Server.MapPath (" cd_catalog.xsl "))

    Response.Write ( xml.transformNode ( xsl ))

    %>

    注意:我们这里的例子采用的是 ASP文件,用VBScript编写的。如果您不了解ASP或者VBScript,建议阅读有关书籍。(当然,也可以采用其他的语言编写服务器端程序)

    第一段代码建立一个 Microsoft Parser(XMLDOM)解析的对象,并将XML文档读入内存;第二段代码建立另外一个对象并导入XSL文档;最后一行代码将XML文档用XSL文档转换,并将结果输出到HTML文件中。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    xml这门语言太好了,我们共同努力吧!!!!!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/10/26 10:44:00
     
     scil 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:35
      积分:179
      门派:XML.ORG.CN
      注册:2004/10/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给scil发送一个短消息 把scil加入好友 查看scil的个人资料 搜索scil在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看scil的博客2
    发贴心情 
    好文章啊
    我本来就知道第一种用法
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/10/29 15:34:00
     
     jimmyvk 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:66
      积分:400
      门派:XML.ORG.CN
      注册:2004/10/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jimmyvk发送一个短消息 把jimmyvk加入好友 查看jimmyvk的个人资料 搜索jimmyvk在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jimmyvk的博客3
    发贴心情 
    写的不错啊,就是一些重复的代码的地方只写一次就可以了
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/26 10:05:00
     
     jimmyvk 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:66
      积分:400
      门派:XML.ORG.CN
      注册:2004/10/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jimmyvk发送一个短消息 把jimmyvk加入好友 查看jimmyvk的个人资料 搜索jimmyvk在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jimmyvk的博客4
    发贴心情 
    还有这段代码:
    < html >

    <body>

    <script language=" javascript ">

    // Load XML

    var xml = new ActiveXObject (" Microsoft.XMLDOM ")

    xml.async = false

    xml.load (" cd_catalog.xml ")

    // Load the XSL

    var xsl = new ActiveXObject ( " Microsoft.XMLDOM ")

    xsl.async = false

    xsl.load (" cd_catalog.xsl ")

    // Transform

    document.write ( xml.transformNode ( xsl ))

    </script>

    </body>

    </html>
    在我的机上运行看不到效果(空白显示),我用的是你的原码,IE版本6.0,请问是如何?

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/26 10:30:00
     
     guiguzi629 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:33
      积分:184
      门派:XML.ORG.CN
      注册:2004/9/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给guiguzi629发送一个短消息 把guiguzi629加入好友 查看guiguzi629的个人资料 搜索guiguzi629在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看guiguzi629的博客5
    发贴心情 
    好东西 我顶!·
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/26 23:36:00
     
     taotaolove 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:9
      积分:95
      门派:XML.ORG.CN
      注册:2004/11/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给taotaolove发送一个短消息 把taotaolove加入好友 查看taotaolove的个人资料 搜索taotaolove在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看taotaolove的博客6
    发贴心情 
    好呀   谢谢
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/28 11:51:00
     
     nybon 帅哥哟,离线,有人找我吗?
      
      
      等级:大三(研究MFC有点眉目了!)
      文章:71
      积分:699
      门派:XML.ORG.CN
      注册:2004/3/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给nybon发送一个短消息 把nybon加入好友 查看nybon的个人资料 搜索nybon在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看nybon的博客7
    发贴心情 
    catalog.xml


    catalog.xsl


    请把两个文件文件名最后的"txt"去掉(上传格式不允许xml和xsl),然后用浏览器就可以浏览了,我试过IE 6.0和Firefox 1.0,都没有问题

    ----------------------------------------------
    <Philosophy>Ontology is a systematic account of Existence.</Philosophy>
    <Tom Gruber>Ontology is an explicit specification of a conceptualization.</Tom Gruber>

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/12/3 9:34:00
     
     coolstar1204 帅哥哟,离线,有人找我吗?天蝎座1979-11-16
      
      
      等级:大一新生
      文章:3
      积分:66
      门派:XML.ORG.CN
      注册:2005/12/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给coolstar1204发送一个短消息 把coolstar1204加入好友 查看coolstar1204的个人资料 搜索coolstar1204在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看coolstar1204的博客8
    发贴心情 
    想知道,如何和数据库联系起来,并能传入参数控件xml和xsl呢。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/21 19:26:00
     
     sharpdo 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:10
      积分:88
      门派:XML.ORG.CN
      注册:2006/1/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sharpdo发送一个短消息 把sharpdo加入好友 查看sharpdo的个人资料 搜索sharpdo在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看sharpdo的博客9
    发贴心情 在我的机子中运行,也是显示空白啊(用IE6.0 和FF1.5)都是显示空白
    以下是引用jimmyvk在2004-11-26 10:30:00的发言:
    还有这段代码:
    < html >

    <body>

    <script language=" javascript ">

    // Load XML

    var xml = new ActiveXObject (" Microsoft.XMLDOM ")

    xml.async = false

    xml.load (" cd_catalog.xml ")

    // Load the XSL

    var xsl = new ActiveXObject ( " Microsoft.XMLDOM ")

    xsl.async = false

    xsl.load (" cd_catalog.xsl ")

    // Transform

    document.write ( xml.transformNode ( xsl ))

    </script>

    </body>

    </html>
    在我的机上运行看不到效果(空白显示),我用的是你的原码,IE版本6.0,请问是如何?


    在我的机子中运行,也是显示空白啊(用IE6.0 和FF1.5)都是显示空白.请问这个问题解决了吗???

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/2/4 16:25:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/23 0:01:27

    本主题贴数9,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    171.997ms