zoukankan      html  css  js  c++  java
  • 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会报这个错误:

    可能太旧的原因导致。

  • 相关阅读:
    微软算法100题25 查找连续最长的数字串
    微软算法100题24 就地逆序单链表
    微软算法100题21 数列中所有和为特定值的组合
    微软算法100题20 字符串转整数 atoi
    约瑟夫环
    微软算法100题17 字符串中找到第一个只出现一次的字符
    微软算法100题16 按层遍历二叉树
    微软算法100题15 求二元查找树的镜像
    微软算法100题14 在排序数组中找到和为指定数的任意两个元素
    NLP(十) 主题识别
  • 原文地址:https://www.cnblogs.com/EasonJim/p/6958988.html
Copyright © 2011-2022 走看看