|
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 Coreoutparsesetx Flow ControlchoosewhenotherwiseforEachif Transformationtransformparam
The XML tags use XPath as a local expression language; XPath expressions are always specified using attribute
select. This means that only values specified forselectattributes 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:
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.
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 replacingbookstore4withbookstore5. A samplebookstore5.waris 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
parsetag parses an XML document and saves the resulting object in the EL variable specified by attributevar. Inbookstore5, the XML document is parsed and saved to a context attribute inparseBooks.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
setandouttags parallel the behavior described in Variable Support Tags and Miscellaneous Tags for the XPath local expression language. Thesettag evaluates an XPath expression and sets the result into a JSP EL variable specified by attributevar. Theouttag evaluates an XPath expression on the current context node and outputs the result of the evaluation to the currentJspWriterobject.The JSP page
bookdetails.jspselects a book element whoseidattribute matches the request parameterbookIdand sets theabookattribute. Theouttag 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:setstores an internal XML representation of a node retrieved using an XPath expression; it doesn't convert the selected node into aStringand store it. Thus,x:setis primarily useful for storing parts of documents for later retrieval.If you want to store a
String, you need to usex:outwithinc:set. Thex:outtag converts the node to aString, andc:setthen stores theStringas an EL variable. For example,bookdetails.jspstores an EL variable containing a book price, which is later provided as the value of afmttag, 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
Stringmanually using XPath'sstringfunction.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.jspuses theforEachtag to display all the books contained inbooklistas 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"/> </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"/> </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}"> <fmt:message key="CartAdd"/> </a> </td> </tr> <tr> <td bgcolor="#ffffff"> <fmt:message key="By"/> <em> <x:out select="$book/firstname"/> <x:out select="$book/surname"/></em></td></tr> </x:forEach>Transformation Tags
The
transformtag applies a transformation, specified by a XSLT stylesheet set by the attributexslt, to an XML document, specified by the attributedoc. If thedocattribute is not specified, the input XML document is read from the tag's body content.The
paramsubtag can be used along withtransformto set transformation parameters. The attributesnameandvalueare 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.