SQL标签库提供了创建和操作XML文档的标签。
引入语法:<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
导入包:http://www.apache.org/dist/xerces/j/ 进行下载
解压,提取xalan.jar 和 xercesImpl.jar ,导入工程中。
XML标签都有:
标签 | 描述 |
---|---|
<x:out> | 与<%= ... >,类似,不过只用于XPath表达式 |
<x:parse> | 解析 XML 数据 |
<x:set> | 设置XPath表达式 |
<x:if> | 判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体 |
<x:forEach> | 迭代XML文档中的节点 |
<x:choose> | <x:when>和<x:otherwise>的父标签 |
<x:when> | <x:choose>的子标签,用来进行条件判断 |
<x:otherwise> | <x:choose>的子标签,当<x:when>判断为false时被执行 |
<x:transform> | 将XSL转换应用在XML文档中 |
<x:param> | 与<x:transform>共同使用,用于设置XSL样式表 |
<x:out> 显示XPath表达式的结果,类似于<c:out>
语法:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
select | 需要计算的XPath表达式,通常使用XPath 变量 | 是 | 无 |
escapeXml | 是否忽略XML 特殊字符 | 否 | true |
<x:parse> 用来解析属性中或标签主体中的XML数据
语法:
<x:parse xml="xml文本变量" var="使用变量" />
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
var | 包含已解析XML数据的变量 | 否 | 无 |
xml | 需要解析的文档的文本内容(String或Reader) | 否 | Body |
systemId | 系统标识符URI,用来解析文档 | 否 | 无 |
filter | 应用于源文档的过滤器 | 否 | 无 |
doc | 需要解析的XML文档 | 否 | Page |
scope | var属性的作用域 | 否 | Page |
varDom | 包含已解析XML数据的变量 | 否 | Page |
scopeDom | varDom属性的作用域 | 否 | Page |
eg:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> <html> <head> <title>Using JSTL Functions</title> </head> <body> <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" /> <p>关于第一本书的信息:</p> name:<x:out select="$output/books/book[1]/name" /><br> author:<x:out select="$output/books/book[1]/author" /><br> price:<x:out select="$output/books/book[1]/price" /><br> </body> </html>
//输出结果为:
关于第一本书的信息:
name:Padam History
author:ZARA
price:100
<x:set> 为XPath表达式的值设置一个变量
语法:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
var | 代表XPath表达式值得变量 | 是 | Body |
select | 需要计算的XPath表达式 | 否 | 无 |
scope | var属性的作用域 | 否 | Page |
eg:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> <html> <head> <title>Using JSTL Functions</title> </head> <body> <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" /> <p>子节点中book节点值为:<c:out value="${fragment}" /></p> </body> </html>
//输出结果为:
子节点中book节点值为:[]
<x:if> 判断一个XPath表达式的值,若为真则执行
语法:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
select | 需要计算的XPath表达式 | 是 | 无 |
var | 存储条件结果的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | Page |
eg:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> <html> <head> <title>Using JSTL Functions</title> </head> <body> <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/books/bookp[1]/price >100"> Book1 prices are very high <x:out select="$output/books/book[1]/price <100" /> </x:if> <x:if select="$output/books/book[2]/price >100"> Book2 prices are very high </x:if> </body> </html>
//输出结果为:
Book2 prices are very high
<x:forEach> 循环遍历各节点
语法:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
select | 需要计算的XPath表达式 | 是 | 无 |
var | 用于存储当前项目的变量 | 否 | 无 |
begin | 迭代器的开始索引 | 否 | 无 |
end | 迭代器的结束索引 | 否 | 无 |
step | 迭代的步长 | 否 | 无 |
varStatus | 代表迭代器所存储的状态的变量 | 否 | 无 |
eg:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> <html> <head> <title>Using JSTL Functions</title> </head> <body> <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" /> <p>循环books子节点: <x:forEach select="$output//book" var="item" > <c:out value="${item }" /> </x:forEach> </p> </body> </html>
//输出结果为:
循环books子节点: [book: null] [book: null]
<x:choose> 类似于switch标签
语法:
<x:choose>
<x:when><?x:when>
...
<x:otherwise><x:otherwise>
</x:choose>
<x:when> 判断条件相当于if,属于<x:choose>的子标签
语法:
<x:when select="条件">
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
select | 条件 | 是 | 无 |
<x:otherwise> 相当于switch中的default,属于<x:choose>的子标签
eg:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> <html> <head> <title>Using JSTL Functions</title> </head> <body> <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" /> <p>判断第一本书的作者: <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> </p> </body> </html>
//输出结果为:
判断第一本书的作者: Book is written by ZAR
<x:transform> 将XSL转换应用在XML文档中
语法:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
doc | 源XML文档 | 否 | Body |
docSystemId | 源XML文档的URI | 否 | 无 |
xslt | XSLT 样式表 | 是 | 无 |
xsltSystemId | 源XSLT文档的URI | 否 | 无 |
result | 接收转换结果的对象 | 否 | Print to page |
var | 代表被转换的XML文档的变量 | 否 | Print to page |
scope | var属性的作用域 | 否 | 无 |
<x:param> 在<x:transform>中使用,设置参数名称
语法:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
name | XSLT参数的名称 | 是 | Body |
value | XSLT参数的值 | 否 | 无 |
eg:
xsl:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <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="100%" bgColor="{$bgcolor}"> <xsl:for-each select="book"> <tr> <td> <i><xsl:value-of select="name" /></i> </td> <td> <i><xsl:value-of select="author" /></i> </td> <td> <i><xsl:value-of select="price" /></i> </td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet>
html:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> <html> <head> <title>Using JSTL Functions</title> </head> <body> <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/test2/style.xsl" var="xslt" /> <p>将xml文档按照格式输出: <x:transform xml="${xmltext}" xslt="${xslt}" > <x:param name="bgcolor" value="red"/> </x:transform> </p> </body> </html>
//输出结果为: