JSTL-XML标签库
主页:http://www.cnblogs.com/EasonJim/p/6958992.html的分支页。
一、<x:out>
<x:out>
标签显示XPath表达式的结果,它的作用和JSP语法中的<%= %>
类似。
属性:
<x:out>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
select | 作为字符串要计算的XPath表达式,通常使用XPath变量 | 是 | 无 |
escapeXml | 如果标签会转义特殊的XML字符,则为真 | 否 | true |
实例:
举个例子,会覆盖(a)(b)标签。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <html> <head> <title>JSTL x:out Tags</title> </head> <body> <h3>Books Info:</h3> <c:set var="xmltext"> <books> <book> <name>Padam History</name> <author>ZARA</author> <price>100</price> </book> <book> <name>Great Mistry</name> <author>NUHA</author> <price>2000</price> </book> </books> </c:set> <x:parse xml="${xmltext}" var="output"/> <b>The title of the first book is</b>: <x:out select="$output/books/book[1]/name" /> <br> <b>The price of the second book</b>: <x:out select="$output/books/book[2]/price" /> </body> </html>
这将产生如下所示结果:
二、<x:parse>
<x:parse>
标签用于解析通过一个属性或在标签本体中指定的XML数据。
属性:
<x:parse>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
var | 包含解析的XML数据的变量 | 否 | 无 |
xml | 要解析的文档文本(String或Reader) | 否 | Body |
systemId | 解析文档的系统标识符URI | 否 | 无 |
filter | 应用于源文档的过滤器 | 否 | 无 |
doc | 要被解析的XML文档 | 否 | 页面 |
scope | 在var属性中指定的变量范围 | 否 | 页面 |
varDom | 包含解析的XML数据的变量 | 否 | 页面 |
scopeDom | 在varDom属性中指定的变量范围 | 否 | 页面 |
实例:
下述的例子中描述了解析是怎样用来读取和解析外部的XML文件的:
已经理解了怎样从给定的文档中的主体解析XML。现在将下述内容放到books.xml文件中:
<books> <book> <name>Padam History</name> <author>ZARA</author> <price>100</price> </book> <book> <name>Great Mistry</name> <author>NUHA</author> <price>2000</price> </book> </books>
现在尝试下述的main.jsp,并保存在相同的目录中:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <html> <head> <title>JSTL x:parse Tags</title> </head> <body> <h3>Books Info:</h3> <c:import var="bookInfo" url="http://localhost:8080/books.xml"/> <x:parse xml="${bookInfo}" var="output"/> <b>The title of the first book is</b>: <x:out select="$output/books/book[1]/name" /> <br> <b>The price of the second book</b>: <x:out select="$output/books/book[2]/price" /> </body> </html>
现在用http://localhost:8080/main.jsp
尝试访问上述JSP,这会产生如下所示结果:
三、<x:set>
<x:set>
标签为XPath表达式的值设置变量。
如果XPath表达式的结果是一个布尔值,<x:set>标签就设置java.lang.Boolean对象;若结果是一个字符串,就设置java.lang.String对象;若结果是一个数值,就设置java.lang.Number对象。
属性:
<x:set>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
var | 设置XPath表达式值的变量 | 是 | Body |
select | 要计算的XPath表达式 | 否 | 无 |
scope | 在var属性中指定的变量范围 | 否 | 页面 |
实例:
下述例子展示了如何使用<x:set>
标签:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <html> <head> <title>JSTL Tags</title> </head> <body> <h3>Books Info:</h3> <c:set var="xmltext"> <books> <book> <name>Padam History</name> <author>ZARA</author> <price>100</price> </book> <book> <name>Great Mistry</name> <author>NUHA</author> <price>2000</price> </book> </books> </c:set> <x:parse xml="${xmltext}" var="output"/> <x:set var="fragment" select="$output//book"/> <b>The price of the second book</b>: <c:out value="${fragment}" /> </body> </html>
现在尝试访问JSP,会产生如下所示结果:
四、<x:if>
<x:if>
标签计算了一个测试XPath表达式,如果测试条件为真,则处理它的主体,如果测试条件为假,主体就被忽略。
属性:
<x:if>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
select | 要计算的XPath表达式 | 是 | 无 |
var | 存储条件结果的变量名 | 否 | 无 |
scope | 在var属性中指定的变量范围 | 无 | 页面 |
实例:
下述例子展示了如何使用<x:if>
标签:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <html> <head> <title>JSTL x:if Tags</title> </head> <body> <h3>Books Info:</h3> <c:set var="xmltext"> <books> <book> <name>Padam History</name> <author>ZARA</author> <price>100</price> </book> <book> <name>Great Mistry</name> <author>NUHA</author> <price>2000</price> </book> </books> </c:set> <x:parse xml="${xmltext}" var="output"/> <x:if select="$output//book"> Document has at least one <book> element. </x:if> <br /> <x:if select="$output/books[1]/book/price > 100"> Book prices are very high </x:if> </body> </html>
现在尝试访问JSP,将会产生如下所示结果:
五、<x:forEach>
<x:forEach>
标签用于在XML文档中的代码中循环。
属性:
<x:forEach>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
select | 要计算的XPath表达式 | 是 | 无 |
var | 每次循环中存储当前项目的变量名 | 否 | 无 |
begin | 迭代的开始指针 | 否 | 无 |
end | 迭代的结束指针 | 否 | 无 |
step | 遍历集合时指针增量的大小 | 否 | 无 |
varStatus | 存储的迭代状态的变量名 | 否 | 无 |
实例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <html> <head> <title>JSTL x:if Tags</title> </head> <body> <h3>Books Info:</h3> <c:set var="xmltext"> <books> <book> <name>Padam History</name> <author>ZARA</author> <price>100</price> </book> <book> <name>Great Mistry</name> <author>NUHA</author> <price>2000</price> </book> </books> </c:set> <x:parse xml="${xmltext}" var="output"/> <ul class="list"> <x:forEach select="$output/books/book/name" var="item"> <li>Book Name: <x:out select="$item" /></li> </x:forEach> </ul> </body> </html>
这将产生如下所示结果:
六、<x:choose>,<x:when>,<x:otherwise>
<x:choose>
标签的工作方式类似于Java的switch语句,允许在许多选项中进行选择。switch语句有case语句,<x:choose>
标签有<x:when>
标签。switch语句有缺省子句来指定默认操作,同样的,<x:choose>
标签也有<x:otherwise>
标签作为缺省子句。
属性:
-
<x:choose>
标签没有任何属性。 -
<x:when>
标签有一个属性,如下所示。 <x:otherwise>
标签没有任何属性。
<x:when>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
select | 要计算的条件 | 是 | 无 |
实例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <html> <head> <title>JSTL x:choose Tags</title> </head> <body> <h3>Books Info:</h3> <c:set var="xmltext"> <books> <book> <name>Padam History</name> <author>ZARA</author> <price>100</price> </book> <book> <name>Great Mistry</name> <author>NUHA</author> <price>2000</price> </book> </books> </c:set> <x:parse xml="${xmltext}" var="output"/> <x:choose> <x:when select="$output//book/author = 'ZARA'"> Book is written by ZARA </x:when> <x:when select="$output//book/author = 'NUHA'"> Book is written by NUHA </x:when> <x:otherwise> Unknown author. </x:otherwise> </x:choose> </body> </html>
这将产生如下所示结果:
七、<x:transform>
<x:transform>
标签用于XML文档中的XML转换。
属性:
<x:transform>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
doc | XSLT转换的源XML文档 | 否 | Body |
docSystemId | 初始XML文档的URI | 否 | 无 |
xslt | XSLT样式表提供转换指导 | 是 | 无 |
xsltSystemId | 初始XSLT文档的URI | 否 | 无 |
result | 接收转换结果的结果对象 | 否 | 页面输出 |
var | 设置为转换的XML文档的变量 | 否 | 页面输出 |
scope | 显示转换结果的变量范围 | 否 | 无 |
实例:
考虑如下所示的XSLT样式表style.xsl:
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" indent="yes"/> <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="books"> <table border="1" width="100%"> <xsl:for-each select="book"> <tr> <td> <i><xsl:value-of select="name"/></i> </td> <td> <xsl:value-of select="author"/> </td> <td> <xsl:value-of select="price"/> </td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet>
现在考虑如下所示的JSP文件:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <html> <head> <title>JSTL x:transform Tags</title> </head> <body> <h3>Books Info:</h3> <c:set var="xmltext"> <books> <book> <name>Padam History</name> <author>ZARA</author> <price>100</price> </book> <book> <name>Great Mistry</name> <author>NUHA</author> <price>2000</price> </book> </books> </c:set> <c:import url="http://localhost:8080/style.xsl" var="xslt"/> <x:transform xml="${xmltext}" xslt="${xslt}"/> </body> </html>
这将产生如下所示的结果:
八、<x:param>
<x:param>
标签和转换标签一起使用来设置XSLT样式表中的参数。
属性:
<x:param>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
name | 要设置的XSLT参数名 | 是 | Body |
value | 要设置的XSLT参数值 | 否 | 无 |
实例:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> <c:set var="doc1"> <document> <description>This is first document.</description> </document> </c:set> <x:parse varDom="doc2"> <document> <description>This is second document.</description> </document> </x:parse> <x:parse varDom="doc3"> <document> <description>This is third document.</description> </document> </x:parse> <c:set var="xslt"> <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" /> <xsl:param name="doc2"/> <xsl:param name="doc3"/> <xsl:template match="/"> <xsl:value-of select="/document/description" /><br /> <xsl:value-of select="$doc2/document/description" /><br /> <xsl:value-of select="$doc3/document/description" /><br /> </xsl:template> </xsl:stylesheet> </c:set> <html> <head><title>Example of x:param tag of JSTL</title></head> <body> <x:transform xml="${doc1}" xslt="${xslt}"> <x:param name="doc2" value="${doc2}" /> <x:param name="doc3" value="${doc3}" /> </x:transform> </body> </html>
这将产生如下所示结果:
提示:如果参考官网的教程https://www.tutorialspoint.com/jsp/jstl_xml_param_tag.htm,Eclipse会报这个错误:
可能太旧的原因导致。