xsltxslt入门


备注

XSLT(XSL转换,可扩展样式表语言转换)是一种基于XML的编程语言,其目的是操作和转换XML。它是一种函数式编程语言和W3C标准。使用XSLT,您可以将一个或多个XML文档转换为可能具有各种输出格式(XML,HTML,文本)的结果。

要了解XSLT - 最好具备以下良好的工作知识:

  1. XML
  2. XPath的

如果没有这两个基本概念,您将难以学习XSLT。首先,因为XSLT文档是XML文档。其次,XSLT文档利用XPath来查询正在转换的XML文档。

推荐阅读: https//en.wikipedia.org/wiki/XSLT

版本

规格状态发布日期
XSLT 1.0 https://www.w3.org/TR/xslt 建议 1998-08-18
XSLT 2.0 https://www.w3.org/TR/xslt20 建议 2007-01-23
XSLT 3.0 https://www.w3.org/TR/xslt-30 候选人推荐二○一五年十一月十九日

安装或设置

XSLT是一种专用编程语言;它广泛用于将XML文档转换为不同的XML格式,HTML格式或基于文本的格式。

使用的XSLT有两个主要版本:XSLT 1.0和XSLT 2.0。 XSLT 1.0实现得更广泛,但与XSLT 2.0相比有许多限制和局限性;您需要决定使用哪个版本。如果XSLT 2.0处理器适用于您选择的环境,那么这几乎总是更好的选择。

(XSLT 1.0于1999年11月问世,许多实现在一两年内出现,主要来自Microsoft,IBM,Sun和Oracle等主流供应商,以及业余时间工作的个人爱好者.XSLT 2.0于1月份问世2007年,许多最初的1.0处理器从未升级,因为他们的开发人员已经失去了兴趣。最广泛使用的XSLT 2.0处理器是Saxon,但它没有自己的领域:其他独立产品包括RaptorXML(来自Altova) ),XmlPrime(来自CBCL)和Exselt以及2.0处理器也可以嵌入IBM的WebLogic,MarkLogic的XML数据库服务器和Intel的XML Accelerator中。)

XSLT 3.0的规范在​​技术上是完整的(2017年4月提出建议),但最好被认为是目前最前沿的:只有当你迫切需要它的新功能时才考虑它,例如流,包,JSON支持,或尝试/捕捉。有三种已知的实现:Saxon,Exselt和RaptorXML。

要开始使用XSLT,您有以下几种选择:

  • 使用在线XSLT工具。有几个可用(搜索“在线XSLT工具”),一个非常可靠的在线IDE是http://xsltransform.net/ 。这是一种初步了解语言的好方法,但是一旦你进行了真正的开发,你就不会想要继续这种方式了。

  • 使用每个浏览器内置的XSLT引擎。与在线工具一样,这些工具的优势在于您无需安装任何东西;但是浏览器只支持XSLT 1.0,它们只支持XML到HTML的转换,而且它们的调试支持非常弱。最近 - 但仍在实验 - 开发的是Saxon-JS,它允许在浏览器中执行XSLT 2.0(和部分XSLT 3.0)。

  • 安装XSLT处理器(例如Saxon或xsltproc)。这些产品中的大多数可以使用操作系统命令行调用,或者使用API​​用于特定编程语言,如Java,C,C#或Python。

  • 安装XML开发环境,例如来自SyncroSoft的Altova XML Spy,oXygen或Stylus Studio。虽然这是一个更昂贵的选项,但它提供了更丰富的开发支持和调试功能。

无论您选择哪个选项,都应首先决定是否要使用XSLT 1.0或XSLT 2.0。

简单的XSLT示例

这是一个使用XSLT将XML文件中的数据转换为HTML文件中的表的简单示例。您可以使用它来试验简单的XSLT转换。

先决条件:安装Java运行时环境并将JRE的位置添加到PATH变量。 (在Windows上,大多数安装程序会将Java添加到您的路径中。)如果这样可行,您应该能够打开命令行窗口并运行命令java -version 并获取有关JRE的信息的打印输出。

  1. 在这里下载Saxon-HE XSLT处理器for Java: saxon.sourceforge.net并将其解压缩到您计算机上的任何位置。
  2. 在文本编辑器中,使用以下代码创建名为pets.xml 的文件:
  <pets>
  <petType name="Dogs">
    <pet id="123" name="Sparky" vaccineStatus="vaccinated" healthStatus="healthy"/>
    <pet id="234" name="Sadie" vaccineStatus="unvaccinated" healthStatus="sick"/>
    <pet id="345" name="Herman" vaccineStatus="unvaccinated" healthStatus="unknown"/>
  </petType>
  <petType name="Cats">
    <pet id="456" name="Cleo" vaccineStatus="vaccinated" healthStatus="healthy"/>
    <pet id="567" name="Janet" vaccineStatus="unvaccinated" healthStatus="healthy"/>
    <pet id="678" name="Furry" vaccineStatus="vaccinated" healthStatus="sick"/>
  </petType>
</pets>
  1. 在文本编辑器中,使用以下代码创建名为petTransform.xsl 的文件:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">

<!-- handle the root XML element -->
<xsl:template match="/">
<html><head>
  <title>Pets that are available for adoption</title>
</head>
<body>
  <xsl:apply-templates/>
</body>
</html>
</xsl:template>

<xsl:template match="pets">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="petType">
<h2><xsl:value-of select="@name"/></h2>
<table id="{@name}">
   <tr>
     <th colname="id">ID</th>
     <th colname="name">Name</th>
     <th colname="vaccinated">Vaccine status</th>
     <th colname="health">Health status</th>
   </tr>
   <tbody>
     <!-- add a row for each pet in this category -->
     <xsl:for-each select="pet">
       <tr>
         <td colname="id"><xsl:value-of select="@id"/></td>
         <td colname="name"><xsl:value-of select="@name"/></td>
         <td colname="vaccinated"><xsl:value-of select="@vaccineStatus"/></td>
         <td colname="health"><xsl:value-of select="@healthStatus"/></td>
       </tr>
     </xsl:for-each>
   </tbody>
 </table>
</xsl:template>

<!-- ignore the content of other tags because we processed them elsewhere -->
<xsl:template match="*">
<!-- do nothing -->
</xsl:template>

</xsl:stylesheet>
  1. 打开命令行窗口并转到包含XML和XSLT文件的文件夹。
  2. 运行以下命令,其中path_to_saxon.jar 是文件saxon9he.jar 的完整路径:
java -jar "path_to_saxon.jar" -o
petOutput.html -s:pets.xml -xsl:pettransform.xslt
 

例如:

java -jar "C:\Program Files\SaxonHE9-7-0-7J\saxon9he.jar" -o
petOutput.html -s:pets.xml -xsl:pettransform.xslt
 

确保在一行上运行此命令。

  1. 在文本编辑器中打开输出文件petOutput.html 。它应该如下所示:
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Pets that are available for adoption</title>
   </head>
   <body>
      
      <h2>Dogs</h2>
      <table id="Dogs">
         <tr>
            <th colname="id">ID</th>
            <th colname="name">Name</th>
            <th colname="vaccinated">Vaccine status</th>
            <th colname="health">Health status</th>
         </tr>
         <tbody>
            <tr>
               <td colname="id">123</td>
               <td colname="name">Sparky</td>
               <td colname="vaccinated">vaccinated</td>
               <td colname="health">healthy</td>
            </tr>
            <tr>
               <td colname="id">234</td>
               <td colname="name">Sadie</td>
               <td colname="vaccinated">unvaccinated</td>
               <td colname="health">sick</td>
            </tr>
            <tr>
               <td colname="id">345</td>
               <td colname="name">Herman</td>
               <td colname="vaccinated">unvaccinated</td>
               <td colname="health">unknown</td>
            </tr>
         </tbody>
      </table>
      
      <h2>Cats</h2>
      <table id="Cats">
         <tr>
            <th colname="id">ID</th>
            <th colname="name">Name</th>
            <th colname="vaccinated">Vaccine status</th>
            <th colname="health">Health status</th>
         </tr>
         <tbody>
            <tr>
               <td colname="id">456</td>
               <td colname="name">Cleo</td>
               <td colname="vaccinated">vaccinated</td>
               <td colname="health">healthy</td>
            </tr>
            <tr>
               <td colname="id">567</td>
               <td colname="name">Janet</td>
               <td colname="vaccinated">unvaccinated</td>
               <td colname="health">healthy</td>
            </tr>
            <tr>
               <td colname="id">678</td>
               <td colname="name">Furry</td>
               <td colname="vaccinated">vaccinated</td>
               <td colname="health">sick</td>
            </tr>
         </tbody>
      </table>
      
   </body>
</html>
 
  1. 在Web浏览器中打开输出文件petOutput.html 。它应该在一个简单的表中显示数据。