Xslt

XSLT的英文标准名称为eXtensible Stylesheet Language Transformation。根据W3C的规范说明书( http://www.w3.org/TR/xslt ),最早设计XSLT的用意是帮助XML文档 (document)转换为其它文档。但是随着发展,XSLT已不仅仅用于将XML转换为HTML或其它文本格式,更全面的定义应该是: XSLT是一种用来转换XML文档结构的语言。
为了使数据便于人们的阅读理解,我们需要将信息显示出来或者打印出来,例如将数据变成一个HTML文件,一个PDF文件,甚至是一段声音;同样,为了使数据适合不同的应用程序,我们必须有能够将一种数据格式转换为另一种数据格式,比如需求格式可能是一个文本文件,一个SQL语句,一个HTTP信息,一定顺序的数据调用等。而XSLT就是我们用来实现这种转换功能的语言。将XML转换为HTML,是目前XSLT最主要的功能。

1.XSLT stylesheets can automate the conversion of the same input into multiple output formats.

2.XSLT一个很大的优势就是可以在任何地方随时在XML数据全局范围内抓取需要的任何数据,不受XML数据结构影响。
3.将数据和表达形式分离。就象天气预报的信息可以显示在不同的设备上,电视,手机或者其它。这样给你一个XML,一个DTD,就可以开发XSLT,而不用关心后台数据如何实现。比如如果有一天突然觉得要换界面了,那么重新做一个xsl就好了,后台的程序和xml的结构完全不需要修改,如果你用传统的方法,由于数据和显示耦合的太紧密,所有的页面都将重写...

4.将XSLT转化在客戶端运行可以大大减少服务器压力,服务器只需要将XML数据发送到客戶端,XSLT已經保存在本地,从而减小网络流量.

5.可以很好的避免安全性問題,以XSLT转化得到的页面通过查看源代码得到的只有XML数据。

6.能够很好的适应需求的快速变化,不用修改逻辑代码,不用编译,甚至可以直接在线修改,就可以解决比较一般的需求变化。

7.另外,是因为它专门用来处理xml,它处理xml比DOM方便多了,对于目前盛行的Ajax应用来说,尤其有其发挥空间,比较典型的可以参考AJAXSLT
ajaxslt是一个针对Ajax在取得XML资料格式后,利用Javascript动态加入XSL-T(XML Stylesheet Language - Transformation)与及XPath的运用所开发的一套元件。一般上,XMLHttpRequest在传回XML字串后,我们必须花另一个功夫将这些XML数据转换成能够显示的用户界面,这是非常繁琐的工作,而且程序码的重用是一个恶梦。不过,通过ajaxslt,我们可以利用XSLT模版对XML文件进行处理,然后输出一个用户界面,当然我们不必了解ajaxslt是怎样处理XML和XSLT的,只要熟悉XSLT和XPath的原理就可以很轻松地处理XML文件了。

8.一个xslt可以生成N种版面布局,但html就只能通过script来实现.

以下例子:xml转换成HTML

如下是要转换的xml文件howto.xml示例:

<?xml version="1.0"?>
<howto>
  <topic>
      <title>Java</title>
      <url>http://outofmemory.cn/code-snippet/tagged/java</url>
  </topic>
    <topic>
      <title>Python</title>
      <url>http://outofmemory.cn/code-snippet/tagged/python</url>
  </topic>
      <topic>
        <title>Javascript</title>
        <url>http://outofmemory.cn/code-snippet/tagged/javascript</url>
  </topic>
      <topic>
        <title>VBScript</title>
        <url>http://outofmemory.cn/code-snippet/tagged/VBScript</url>
  </topic>
</howto>

示例xslt文件[howto.xsl]

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<head><title>Real's HowTo</title></head>
<body>
<table border="1">
<tr>
<th>Title</th>
<th>URL</th>
</tr>
<xsl:for-each select="howto/topic">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="url"/></td>
</tr>
</xsl:for-each>
</table>
</body></html>
</xsl:template>
</xsl:stylesheet>

做转换的java代码:

import javax.xml.transform.*;
import java.net.*;
import java.io.*;

public class HowToXSLT {
public static void main(String[] args) {
  try {

    TransformerFactory tFactory = TransformerFactory.newInstance();

    Transformer transformer =
      tFactory.newTransformer
         (new javax.xml.transform.stream.StreamSource
            ("src/howto.xsl"));

    transformer.transform
      (new javax.xml.transform.stream.StreamSource
            ("src/howto.xml"),
       new javax.xml.transform.stream.StreamResult
            ( new FileOutputStream("src/howto.html")));
    }
  catch (Exception e) {
    e.printStackTrace( );
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XSLT中,确实没有内置的split函数来分割字符串。但是你可以使用递归和substring函数来实现类似的功能。下面是一个示例代码,展示了如何在XSLT中实现一个简单的split函数: ``` <xsl:template name="split"> <xsl:param name="input" /> <xsl:param name="delimiter" select="','" /> <xsl:choose> <xsl:when test="contains($input, $delimiter)"> <xsl:value-of select="substring-before($input, $delimiter)" /> <xsl:text> </xsl:text> <xsl:call-template name="split"> <xsl:with-param name="input" select="substring-after($input, $delimiter)" /> <xsl:with-param name="delimiter" select="$delimiter" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$input" /> <xsl:text> </xsl:text> </xsl:otherwise> </xsl:choose> </xsl:template> ``` 这个模板将接受两个参数:input和delimiter。它会逐个输出input中使用delimiter分隔的部分,并在每个部分后面添加一个换行符。 你可以在需要的地方调用这个模板,传递对应的参数来实现你的需求。比如,你可以在你的XSLT文档的某个模板中这样使用它: ``` <xsl:call-template name="split"> <xsl:with-param name="input" select="'ItemA,ItemB,ItemC'" /> <xsl:with-param name="delimiter" select="','" /> </xsl:call-template> ``` 这样,将会以换行符分隔的形式输出"ItemA"、"ItemB"和"ItemC"。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [在xslt中实现split方法对查询字符串进行分隔](https://blog.csdn.net/ddjq1044/article/details/101340306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [利用xslt对xml中数据实现splite换行的总结](https://blog.csdn.net/gaotong2055/article/details/84128994)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值