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会报这个错误:

可能太旧的原因导致。

 

posted @ 2017-06-07 20:42  EasonJim  阅读(866)  评论(0编辑  收藏  举报