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