在上面的输入和解析动作中,我们装载和解析了一个指定的XML文档到一个变量doc里。在上面的每个x:out动作中,我们使用了一个XPath表达式访问了解析的XML文档的元素,并且发送结果到JSP页输出中。
上面的设置表达式计算了一个XPath表达式并且将结果输入到一个限定范围的变量里(在上述例子中,它指在一个请求范围内)。
x:out 和x:set动作可以输出一个JspTagException。如果他们没有成功的话(极有可能因为XPath表达式指向并不存在的标记),你的页,像在所有其他情况下一样,应该智能的处理这些异常(要么通过传统的JSP errorPage指令,要么使用JSTL的c:catch动作),
JSTL容易处理XSLT转换。在下面的示范页中,我们使用来自XML标记库中的x:transform动作,用一个XSLT stylesheet创建一个来自于XML源文档的一个格式化的页。x:transform动作最重要的属性是XML和XSLT属性,在下面的例子中,我们设置了一个来自于我们在同一页初始化的变量的xslt属性;我们也在动作的体中设置了XML属性。该动作默认为x:transform动作。
默认的,转换的结果送到页输出上;你也可以保存结果到一个带x:var属性的变量内:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>
<c:set var="xsltSource">
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="music">
<html>
<head></head>
<body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0">
<table cellpadding="0" cellspacing="0" border="1" bgcolor="#ffffff">
<tr>
<td><STRONG>Artist</STRONG></td>
<td><STRONG>Album</STRONG></td>
<td><STRONG>Year</STRONG></td>
<td><STRONG>Genre</STRONG></td>
</tr>
<!---Set up for loop to collect all the artist information //-->
<!-- <xsl:for-each select="./*[name()=''artists'']"> -->
<xsl:for-each select="artists">
<tr>
<td><xsl:value-of select="artist"/></td>
<td><xsl:value-of select="album"/></td>
<td><xsl:value-of select="year"/>