zoukankan      html  css  js  c++  java
  • XSLT使用<转载>

    1         XSLT知识点

    1.1       入门学习网站

    http://www.w3school.com.cn/xsl/index.asp

    1.2       函数

    XSLTXPath,XQuery使用相同的函数库。

    http://www.w3school.com.cn/xpath/xpath_functions.asp

    1.3       常用的XSLT元素

    1.3.1       <xsl:template>

    XSL 样式表由一个或多套被称为模板(template)的规则组成。每个模板含有当某个指定的节点被匹配时所应用的规则。

    1.3.2       <xsl:value-of>

    <xsl:value-of> 元素用于提取某个选定节点的值。如:

    <xsl:value-of select="/Data/Books/Book[position()=$pos]/*[name()=$fld]"/>

    1.3.3       <xsl:for-each>

    <xsl:for-each> 元素允许您在 XSLT 中进行循环。实现数据遍历。类似于C#foreach关键字。

    1.3.4       <xsl:if>

    <xsl:if> 元素用于放置针对 XML 文件内容的条件测试。类似于C#if关键字,但是在xslt中没有else分支。

    <xsl:if test=".&gt;85">

     <xsl:attribute name="style">color:red</xsl:attribute>

    </xsl:if>

    <xsl:if test=".&lt;60">

     <xsl:attribute name="style">color:blue</xsl:attribute>

    </xsl:if>

    1.3.5       <xsl:sort>

    如需对结果进行排序,只要简单地在 XSL 文件中的 <xsl:for-each> 元素内部添加一个 <xsl:sort> 元素。如:

    <xsl:for-each select="catalog/cd">

     <xsl:sort select="artist"/>

     <tr>

        <td>

          <xsl:value-of select="title"/>

        </td>

        <td>

          <xsl:value-of select="artist"/>

        </td>

     </tr>

    </xsl:for-each>

    1.3.6       <xsl:choose>

    XSLT <xsl:choose> 元素用于结合 <xsl:when>  <xsl:otherwise> 来表达多重条件测试。

    <xsl:choose>

     <xsl:when test=".&gt;85">优秀</xsl:when>

     <xsl:when test=".&gt;70">一般</xsl:when>

     <xsl:when test=".&gt;60">合格</xsl:when>

     <xsl:otherwise>不合格</xsl:otherwise>

    </xsl:choose>

    1.3.7       <xsl:apply-templates>

    <xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。假如我们向 <xsl:apply-templates> 元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序。

    1.3.8       <xsl:output>

    设置xslt的转换输出,如格式htmlxml等,编码utf8,gb2312等。

    2         HTMLXSLT

    2.1       外部样式表引用

    <head></head>标签之间放置如:

    <head>

     <link type="text/cssrel="stylesheethref="../HtmlTemplate/common.css" />

    </head>

    2.2       外部脚本库引用

    可以放置到<head></head><body></body>中。如:

    <script src="../HtmlTemplate/common.jstype="text/javascript"></script>

    2.3       XSLT内部脚本

    XSLT内部编写脚本时,需要添加<![CDATA[]]>

    <head>

     <link type="text/cssrel="stylesheethref="../HtmlTemplate/common.css" />

     <script src="../HtmlTemplate/common.jstype="text/javascript"></script>

     <script language="JavaScript">

        <![CDATA[

          function showSelected() {

            var ids = [];

            var boxes = tblList.getElementsByTagName("input");

            for (var i = 1; i < boxes.length; i++) {

            if (boxes[i].checked)

                ids.push(boxes[i].bookId);

            }

            document.getElementById("hdIds").value = ids.toString();

            alert(ids);

          }

          ]]>

     </script>

    </head>

    3         XMLXSLT

    现在各种主流浏览器都支持XMLXSLT的转换。可以利用XSLT实现XML从一种结构到另一种结构的转换。

    XML文件的开头可以添加指令生命要引用的XSLT文件。这样浏览器就能够根据这个路径去加载XSLT去执行转换,并将结果显示给用户。

    <?xml version="1.0encoding="utf-8"?>

    <?xml-stylesheet type='text/xsl' href='../HTMLTemplate/DemoComplexList.xslt'?>

     

    4         .NetXSLT

    .Net中通常采用XsltCompiledTransform类来实现转换,其Transform方法支持很多重载,可以是文件,流,或者读写器等。如:

    private static string thruHtml(XDocument xDoc, string xsltFile)

    {

        string basePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

        string xsltPath = string.Format("{0}""HTMLTemplate""{1}", basePath, xsltFile);

        string htmlPath = string.Format("{0}""temp""{1}.htm", basePath, Guid.NewGuid());

     

        using (FileStream fs = new FileStream(htmlPath, FileMode.Create))

        {

            XslCompiledTransform transform = new XslCompiledTransform();

            transform.Load(xsltPath);

     

     

            XmlReader xr = xDoc.CreateReader();

     

            transform.Transform(xr, null, fs);

        }

        return htmlPath;

    }

    5         JavaScriptXSLT

    利用XMLDocument对象模型实现转换,如下代码在IE下运行:

    <html>

    <head>

        <title>CD Catalog</title>

    </head>

    <body>

     

        <script type="text/javascript">

            // Load XML

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

            xml.async = false;

            xml.load("cdcatalog.xml");

     

            // Load XSL

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

            xsl.async = false;

            xsl.load("cdcatalog.xsl");

     

            // Transform

            document.write(xml.transformNode(xsl));

        </script>

     

    </body>

    </html>

     

  • 相关阅读:
    Gogh-位图编纂次序
    Skype 1.4 for Linux 掉掉更新
    Jokosher 0.9
    [推荐]实用网址大全
    创建异形窗口[2]
    创建异形窗口[3]
    动态列表
    给系统菜单添加菜单项
    演示控件的 Anchors 属性
    使用 WM_NCHITTEST 消息判断鼠标所在窗口的部位
  • 原文地址:https://www.cnblogs.com/kingwangzhen/p/2125913.html
Copyright © 2011-2022 走看看