如何在命令行测试XSLT

in #hive-1050173 days ago

在工作中大量使用XSLT进行各种文档的转换。但其调试过程还是比较麻烦的。这里分享一个很好用的命令行工具,可以进行XSLT的调试。以下环境是针对Ubuntu 18.04 LTS的。

image.png

安装

sudo apt-get install xalan

检查xalan的版本号:

xalan -v

下面来做一个简单的测试。首先创建一个简单的XML文件text.xml:

<?xml version="1.0" encoding="UTF-8"?>
<students>
  <student>
    <id>91001</id>
    <name>Jim</name>
  </student>
  <student>
    <id>91002</id>
    <name>Julie</name>
  </student>
  <student>
    <id>91003</id>
    <name>Stuart</name>
  </student>  
</students>

创建测试的XSLT文件:test.xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html> 
<body>
  <h2>Students</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th style="text-align:left">ID</th>
      <th style="text-align:left">Name</th>
    </tr>
    <xsl:for-each select="students/student">
    <tr>
      <td><xsl:value-of select="id"/></td>
      <td><xsl:value-of select="name"/></td>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

在命令行运行:

xalan -in test.xml -xsl test.xsl -out out.html

可以看到生成的HTML文件:

<html>
<body>
<h2>Students</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">ID</th><th style="text-align:left">Name</th>
</tr>
<tr>
<td>91001</td><td>Jim</td>
</tr>
<tr>
<td>91002</td><td>Julie</td>
</tr>
<tr>
<td>91003</td><td>Stuart</td>
</tr>
</table>
</body>
</html>

其实xalan命令行工具还有很多好用的选项。比如运行如下参数:

xalan -in test.xml -xsl test.xsl -out out.html -tg

这样就能看到解析过程中每一个具体步骤:

image.png

如果想要查看在解析过程中被调用的每一个模板,使用参数tt:

xslt xalan -in test.xml -xsl test.xsl -out out.html -tt

如果想要监测在解析过程中对每一个XML元素的选取:

xalan -in test.xml -xsl test.xsl -out out.html -ts

其输出类似于:

image.png