zoukankan      html  css  js  c++  java
  • XSL使用心得

    之前试过用XSL做过一个小网页,这里分享一下试过过程及心得。因为是在公司做的,没法截图没法粘贴,这里只能凭印象描述一下。欢迎探讨和补充。
    XSL可扩展样式表语言,就是把盘根错节的XML文件刷成赏心悦目容易看懂的视图 的一种语言。这里只是介绍一下入门使用。
     
    【可行用法/常用方法】
    个人觉得XSL的最大意义在于用非常轻便的方式,实现了视图与数据的分离。同一个XML数据文件,可以引用不同的XSL样式表而现实成不同的界面。也可以以一个XSL为模板,把符合规格的不同XML文件现实成同样风格的视图。
    http://www.w3school.com.cn/xsl/index.asp
    具体教程可以参考w3c网上学院。其最简单的做法就是在XML中加入引用,如下。

    <?xml-stylesheet type="text/xsl" href="你的样式文件.xsl"?>

    完全可以简单地理解为是XML的CSS样式表。但是,功能更强大。

    【解析过程】
    个人理解,浏览器在加载XML的时候,会读到起样式引用(即xml-stylesheet),载入XSL样式文件。
    XSL样式文件会把定义好的格式加载进来,然后加载XML数据时就会根据格式所定义的节点显示出来。
    其中,XSL样式文件的设计,最重要涉及xmlns(命名空间,也可以理解成标签库),以及XPath(XML查询语言)的概念。以下是例子。

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    ...
    <xsl:for-each select="catalog/cd">
    do something...
    </xsl:for-each>

    第一行是命名空间引用标签库xsl。
    第三行是实用xsl里面的for-each标签。里面的"catalog/cd"就是所谓的XPath(这里的catalog和cd都是XML里面自定义的标签),这里的含义是检索<catalog>中的所有<cd>节点,取出这些节点用来for-each循环。

    【术语解释】
    CSS样式表,用来定义HTML页面显示格式,主要是静态地使用,定义颜色边框字体等。XSL则是主要针对XML文件,是动态使用的,可循环可编程。

    xmlns,XML命名空间,相当于Java中的包,和JSP中的标签库差不多。通俗点说,就是对<xsl:for-each>等标签赋予特殊意义,并附带了操作功能。
    如果还是说不清楚,直接度娘吧 http://baike.baidu.com/view/1853567.htm

    XPath,XML查询语言。就正如SQL能在关系数据库中查询出记录一样,XPath表达式能在XML文件中查询出若干个节点。当然,其功能不仅仅是查询。而唯有基于XPath查询,才能在XSL里查找节点获取,解析时获取数据。

    【使用范围】
    XSL生于样式表,必定是与前端页面密不可分的。比如网站上的RSS订阅源,几乎就是纯粹一个XML文件,但是通过阅读器刷一刷格式,马上可以大小粗细活灵活现地变成一个网站。而且是在浏览器端解析的,对服务器负担不大。十分简易轻便。
    而因为视图和数据是分离的,技术宅完全可以拿一份老树盘根的XML文件,通过XSL刷格式后得到一份亮丽清新的视图拿给客户小白看。这一点对我们很有用。在我们这里,跟客户沟通的同事经常是给我们一份看得头昏脑胀的Excel清单,然后我们技术宅便要干体力活把清单一个一个项地写成POJO或Bean,体力活啊体力活。。。咱完全可以依赖于一份XML文件,既是文档又是数据文件。客户小白就直接在视图上改,保存成XML文件。程序猿则拿着XML或直接操作或用工具生成对象。欢迎博友们推荐这类工具~~~真的,不要让程序猿干体力活,又累又容易出错,哥会怒的~~~当年最蛋疼的莫过于用Excel序列填充去写Java对象。。。
    进一步,如果多看点文档则可以发现,其实XSL隐含着一种流式事件驱动的思想(莫非就是传说中的StaX?求辨析。),也就是说,可以借助XSL解析树,解析XML数据流,并触发已经定义好的事件。具体用法有待日后考证。

    【其他】
    XSL-FO可将XML生成PDF文件。

    谷歌Chrome浏览器因为不允许跨域访问或引用文件,所以本地无法显示,需要发布到服务器。

  • 相关阅读:
    paste DEMO合并文件
    diff 文件比较
    grep DEMO
    tr DEMO
    uniq DEMO
    sort DEMO
    定义提示符 PS1 PS4
    MAVEN修改localRepository不起作用
    java数组初始化
    oracle监听服务无法打开
  • 原文地址:https://www.cnblogs.com/syjkfind/p/2770814.html
Copyright © 2011-2022 走看看