0x01 XML标签
JSTL XML标签库提供了创建和操作XML文档的标签引用XML标签库语法:<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
| 标签 |
描述 |
|
与<%= … >,类似,不过只用于XPath表达式 |
|
解析 XML 数据 |
|
设置XPath表达式 |
|
判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体 |
|
迭代XML文档中的节点 |
|
和的父标签 |
|
的子标签,用来进行条件判断 |
|
的子标签,当判断为false时被执行 |
|
将XSL转换应用在XML文档中 |
|
与共同使用,用于设置XSL样式表 |
0x02 小例子
// 目录结构├── src│ └── main│ └── webapp│ └── com│ │ └── ...│ └── WEB-INF│ │ └── web.xml│ ├── ...│ └── JSTL库测试│ │ ├── ...
0x02.1 //
0x02.1.1 语法
<x:out>标签显示XPath表达式的结果,与 <%= %> 功能相似<x:out>标签语法格式如下:<x:out select="<string>" escapeXml="<true|false>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必选 |
默认值 |
| select |
需要计算的XPath表达式, 通常使用XPath 变量 |
是 |
无 |
| escapeXml |
是否忽略XML特殊字符 |
否 |
true |
0x02.1.2 语法
<x:parse>标签用来解析属性中或标签主体中的XML数据<x:parse>标签语法如下:<x:parse var="<string>" varDom="<string>" scope="<string>" scopeDom="<string>" doc="<string>" systemId="<string>" filter="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
是否必要 |
默认值 |
| var |
包含已解析XML数据的变量 |
否 |
无 |
| xml |
需要解析的文档的文本内容(String或Reader) |
否 |
Body |
| systemId |
系统标识符URI, 用来解析文档 |
否 |
无 |
| filter |
应用于源文档的过滤器 |
否 |
无 |
| doc |
需要解析的XML文档 |
否 |
Page |
| scope |
var属性的作用域 |
否 |
Page |
| varDom |
包含已解析XML数据的变量 |
否 |
Page |
| scopeDom |
varDom属性的作用域 |
否 |
Page |
0x02.1.3 语法
<x:set>标签为XPath表达式的值设置一个变量如果XPath表达式的值是boolean类型,则<x:set>将会设置一个java.lang.Boolean对象若是字符串,则设置一个java.lang.String对象若是数字,则设置一个java.lang.Number对象
<x:set>标签语法格式如下:<x:set var="<string>" select="<string>" scope="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
是否必要 |
默认值 |
| var |
代表XPath表达式值得变量 |
是 |
Body |
| select |
需要计算的XPath表达式 |
否 |
无 |
| scope |
var属性的作用域 |
否 |
Page |
0x02.1.4 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_x_out-x_parse-x_set.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><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><html><head> <title>jstl_x_out-x_parse-x_set</title></head><body><x:parse xml="${xmltext}" var="output"/><div>name: <x:out select="$output/books/book[1]/name"/></div><div>author: <x:out select="$output/books/book[1]/author"/></div><div>price: <x:out select="$output/books/book[1]/price"/></div><hr/><div>name: <x:out select="$output/books/book[2]/name"/></div><div>author: <x:out select="$output/books/book[2]/author"/></div><div>price: <x:out select="$output/books/book[2]/price"/></div></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_x_out-x_parse-x_set.jsp

0x02.2
0x02.2.1 语法
<x:if>标签用于判断一个XPath表达式的值若为真, 则执行其主体中的内容若为假, 则其主体的内容将会被忽略<x:if>标签语法格式如下:<x:if select="<string>" var="<string>" scope="<string>"> ...</x:if>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
是否必要 |
默认值 |
| select |
需要计算的XPath表达式 |
是 |
无 |
| var |
存储条件结果的变量 |
否 |
无 |
| scope |
var属性的作用域 |
否 |
Page |
0x02.2.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_x_if.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><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"> <div>Document has at least one <book> element.</div></x:if><x:if select="$output/books[1]/book/price > 100"> <div>Book prices are very high</div></x:if>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_x_if.jsp

0x02.3
0x02.3.1 语法
<x:forEach>标签用来循环遍历XML文档的节点<x:forEach>语法格式如下:<x:forEach var="<string>" select="<string>" begin="<int>" end="<int>" step="<int>" varStatus="<string>">
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
是否必要 |
默认值 |
| select |
需要计算的XPath表达式 |
是 |
无 |
| var |
用于存储当前项目的变量 |
否 |
无 |
| begin |
迭代器的开始索引 |
否 |
无 |
| end |
迭代器的结束索引 |
否 |
无 |
| step |
迭代的步长 |
否 |
无 |
| varStatus |
代表迭代器所存储的状态的变量 |
否 |
无 |
0x02.3.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_x_foreach.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><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:forEach select="$output/books/book/name" var="item"> <div>name: <x:out select="$item"/></div></x:forEach><hr/><x:forEach select="$output/books/book" var="item"> <div>name: <x:out select="$item/name"/></div> <div>author: <x:out select="$item/author"/></div> <div>price: <x:out select="$item/price"/></div> <br/></x:forEach>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_x_foreach.jsp

0x02.4 //
0x02.4.1 语法
<x:choose>标签与Java switch语句有相同的功能switch语句有case语句而<x:choose>标签有<x:when>标签switch语句有default语句而<x:choose>标签有<x:otherwise>标签
语法格式:<x:choose> <x:when select="<string>"> ... </x:when> <x:when select="<string>"> ... </x:when> ... <x:otherwise> ... </x:otherwise></x:choose><x:choose>没有属性<x:when>标签只有一个属性,在下表中有给出<x:otherwise>没有属性
| 标签的属性 |
|
|
|
| 属性 |
描述 |
是否必要 |
默认值 |
| select |
条件 |
是 |
无 |
0x02.4.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_x_choose-x_when-x_otherwise.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><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>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_x_choose-x_when-x_otherwise.jsp

0x02.5
0x02.5.1 语法
<x:transform>标签在XML文档中应用XSL<x:transform>标签语法格式:<x:transform var="<string>" scope="<string>" result="<string>" doc="<string>" docSystemId="<string>" xslt="<string>" xsltSystemId="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
是否必要 |
默认值 |
| doc |
源XML文档 |
否 |
Body |
| docSystemId |
源XML文档的URI |
否 |
无 |
| xslt |
XSLT 样式表 |
是 |
无 |
| xsltSystemId |
源XSLT文档的URI |
否 |
无 |
| result |
接收转换结果的对象 |
否 |
Print to page |
| var |
代表被转换的XML文档的变量 |
否 |
Print to page |
| scope |
var属性的作用域 |
否 |
无 |
0x02.5.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_x_transform_xslt.jsp<?xml version="1.0" encoding="UTF8" ?><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>
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_x_transform.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><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="./jstl_x_transform_xslt.jsp" var="xslt"/><x:transform xml="${xmltext}" xslt="${xslt}"/>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_x_transform.jsp

0x02.6
0x02.6.1 语法
<x:param>标签与<x:transform>标签一同使用,用于设置XSLT样式表的参数<x:param>标签语法格式:<x:param name="<string>" value="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
是否必要 |
默认值 |
| name |
XSLT参数的名称 |
是 |
Body |
| value |
XSLT参数的值 |
否 |
无 |
0x02.6.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_x_param_xslt.jsp// 使用<xsl:param>标签与{$bgColor}变量<?xml version="1.0" encoding="UTF8" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" indent="yes"/> <xsl:param name="bgColor"/> <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="books"> <table border="1" width="50%" bgColor="{$bgColor}"> <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>
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_x_param.jsp// 在<x:transform>标签中使用<x:param>标签<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><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="./jstl_x_param_xslt.jsp" var="xslt"/><x:transform xml="${xmltext}" xslt="${xslt}"> <x:param name="bgColor" value="grey"/></x:transform>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_x_param.jsp
