Download FAQ History |  | API Search Feedback

> ## XML Tags

> A key aspect of dealing with XML documents is to be able to easily access their content. XPath, a W3C recommendation since 1999, provides an easy notation for specifying and selecting parts of an XML document. The JSTL XML tag set, listed in Table 17-4, is based on XPath (see How XPath Works).

> Table 17-4 XML Tags
> Area | Function | Tags | Prefix
> --- | --- | --- | ---
> XML | Core | `out` `parse` `set` | `x`
> Flow Control | `choose` `when` `otherwise` `forEach` `if`
> Transformation | `transform` `param`

> The XML tags use XPath as a local expression language; XPath expressions are always specified using attribute `select`. This means that only values specified for `select` attributes are evaluated using the XPath expression language. All other attributes are evaluated using the rules associated with the JSP 2.0 expression language.

> In addition to the standard XPath syntax, the JSTL XPath engine supports the following scopes to access Web application data within an XPath expression:

> - `$foo`
> - `$param:`
> - `$header:`
> - `$cookie:`
> - `$initParam:`
> - `$pageScope:`
> - `$requestScope:`
> - `$sessionScope:`
> - `$applicationScope:`

> These scopes are defined in exactly the same way as their counterparts in the JSP expression language discussed in Implicit Objects. Table 17-5 shows some examples of using the scopes.

> Table 17-5 Example XPath Expressions
> XPath Expression | Result
> --- | ---
> `$sessionScope:profile` | The session-scoped EL variable named `profile`
> `$initParam:mycom.productId` | The `String` value of the`mycom.productId` context parameter

> The XML tags are illustrated in another version (`bookstore5`) of the Duke's Bookstore application. This version replaces the database with an XML representation (`books.xml`) of the bookstore database. To build and install this version of the application, follow the directions in The Example JSP Pages replacing `bookstore4` with `bookstore5`. A sample `bookstore5.war` is provided in `<``INSTALL``>/jwstutorial12/examples/web/provided-wars/`.

> ### Core Tags

> The core XML tags provide basic functionality to easily parse and access XML data.

> The `parse` tag parses an XML document and saves the resulting object in the EL variable specified by attribute `var`. In `bookstore5`, the XML document is parsed and saved to a context attribute in `parseBooks.jsp`, which is included by all JSP pages that need access to the document:

>     <c:if test="${applicationScope:booklist == null}" >
>       <c:import url="/books.xml" var="xml" />
>       <x:parse doc="${xml}" var="booklist" scope="application" />
>     </c:if>

> The `set` and `out` tags parallel the behavior described in Variable Support Tags and Miscellaneous Tags for the XPath local expression language. The `set` tag evaluates an XPath expression and sets the result into a JSP EL variable specified by attribute `var`. The `out` tag evaluates an XPath expression on the current context node and outputs the result of the evaluation to the current `JspWriter` object.

> The JSP page `bookdetails.jsp` selects a book element whose `id` attribute matches the request parameter `bookId` and sets the `abook` attribute. The `out` tag then selects the book's title element and outputs the result.

>     <x:set var="abook"
>       select="$applicationScope.booklist/
>         books/book[@id=$param:bookId]" />
>       <h2><x:out select="$abook/title"/></h2>

> As you have just seen, `x:set` stores an internal XML representation of a node retrieved using an XPath expression; it doesn't convert the selected node into a `String` and store it. Thus, `x:set` is primarily useful for storing parts of documents for later retrieval.

> If you want to store a `String`, you need to use `x:out` within `c:set`. The `x:out` tag converts the node to a `String`, and `c:set` then stores the `String` as an EL variable. For example, `bookdetails.jsp` stores an EL variable containing a book price, which is later provided as the value of a `fmt` tag, as follows:

>     <c:set var="price">
>       <x:out select="$abook/price"/>
>     </c:set>
>     <h4><fmt:message key="ItemPrice"/>:
>       <fmt:formatNumber value="${price}" type="currency"/>

> The other option, which is more direct but requires that the user have more knowledge of XPath, is to coerce the node to a `String` manually using XPath's `string` function.

>     <x:set var="price" select="string($abook/price)"/>

> ### Flow Control Tags

> The XML flow control tags parallel the behavior described in Flow Control Tags for the XPath expression language.

> The JSP page`bookcatalog.jsp` uses the `forEach` tag to display all the books contained in `booklist` as follows:

>     <x:forEach var="book"
>       select="$applicationScope:booklist/books/*">
>       <tr>
>         <c:set var="bookId">
>           <x:out select="$book/@id"/>
>         </c:set>=
>         <td bgcolor="#ffffaa">
>           <c:url var="url"
>           value="/bookdetails" >
>             <c:param name="bookId" value="${bookId}" />
>             <c:param name="Clear" value="0" />
>           </c:url>
>           <a href="${url}">
>           <strong><x:out select="$book/title"/>&nbsp;
>           </strong></a></td>
>         <td bgcolor="#ffffaa" rowspan=2>
>           <c:set var="price">
>             <x:out select="$book/price"/>
>           </c:set>
>           <fmt:formatNumber value="${price}" type="currency"/>
>           &nbsp;
>         </td>
>         <td bgcolor="#ffffaa" rowspan=2>
>         <c:url var="url" value="/catalog" >
>           <c:param name="Add" value="${bookId}" />
>         </c:url>
>         <p><strong><a href="${url}">&nbsp;
>           <fmt:message key="CartAdd"/>&nbsp;</a>
>         </td>
>       </tr>
>       <tr>
>         <td bgcolor="#ffffff">
>         &nbsp;&nbsp;<fmt:message key="By"/> <em>
>           <x:out select="$book/firstname"/>&nbsp;
>           <x:out select="$book/surname"/></em></td></tr>
>     </x:forEach>

> ### Transformation Tags

> The `transform` tag applies a transformation, specified by a XSLT stylesheet set by the attribute `xslt`, to an XML document, specified by the attribute `doc`. If the `doc` attribute is not specified, the input XML document is read from the tag's body content.

> The `param` subtag can be used along with `transform` to set transformation parameters. The attributes `name` and `value` are used to specify the parameter. The value attribute is optional. If it is not specified the value is retrieved from the tag's body.

Download FAQ History |  | API Search Feedback

All of the material in The Java(TM) Web Services Tutorial is copyright-protected and may not be published in other works without express written permission from Sun Microsystems.