JSTL与Struts的结合(五)

来源:互联网 发布:mysql登录 编辑:程序博客网 时间:2024/05/17 08:26

 

分类:我的著作
2006.10.7 22:12 作者:小仙狗 | 评论:0 | 阅读:954

9.4.2  用于显示XML内容的<x:out>标签

<x:out>标签从<x:parse>标签解析后保存的变量中取得需要的XML文件内容,并显示在页面上。该标签是通过XPath技术(定位XML元素的一种技术)来实现的。要使用<x:out>标签必须将xalan-jjar包保存在“WEB-INF/lib”下。它的属性和描述如表9.13所示:

9.13 <x:out>标签属性和说明

属性

描述

select

XPath表达式

escape

当特殊字符如:“<,>,&,’,””出现在取得的结果字符串中时,将以转义字符来替换

<x:out>标签需要与<x:parse>标签协同工作,下面看一个示例。

<c:import var="xmlFile" url="http://localhost:8080/booksamplejstl/SampleXml.xml"/>

<x:parse var="xmlFileValue" doc="${xmlFile}"/>

name:<x:out select="$xmlFileValue/xml-body/name"/><br>

passWord:<x:out select="$xmlFileValue/xml-body/passWord"/><br>

age:<x:out select="$xmlFileValue/xml-body/age"/><br>

读取XML文件并解析后的变量xmlFileValue将加上“$”作为XPath表达式的开头,select中的表达式将从xml-body根元素下的各个子元素中取得实体内容,最后将结果显示在页面上。根据“SampleXml.xml”文件的内容,将显示。

name:RW

passWord:123456

age:28

9.4.3  用于保存XML内容的<x:set>标签

<x:set>标签允许将某个源XML中元素的实体内容或属性,保存到一个变量中去,它的实现也依靠XPath技术。它的属性和描述如表9.14所示:

9.14 <x:set>标签属性和说明

属性

描述

select

XPath表达式

var

保存结果的变量名

scope

变量的作用范围(可选)

<x:set>标签的var保存的变量由XPath的结果决定该变量的类型,下面看一个示例。

<c:import var="xmlFile" url="http://localhost:8080/booksamplejstl/SampleXml.xml"/>

<x:parse var="xmlFileValue" doc="${xmlFile}"/>

<x:set select="$xmlFileValue/xml-body/name" var="thisName"/>

这里将保存XMLname元素内容到变量“thisName”中。

9.4.4  用于判断的<x:if>标签

<x:if>标签允许由XPathboolean()函数得到的判断结果,来判断是否显示其标签所包含的内容。<x:if>标签的属性与<x:set>标签相同,但是var的结果只能是boolean类型。

9.4.5  用于复杂判断的<x:choose><x:when><x:otherwise>标签

这组标签将一起使用,来提供“if elseif”语句的功能。

<x:choose>标签没有属性,可以被认为是父标签,<x:when><x:otherwise>将作为其子标签来使用。

<x:when>标签等价于“if”语句,它包含一个select属性,该属性为XPath判断表达式。

<x:otherwise>标签没有属性,它等价于“else”语句。

9.4.6  用于对XML元素循环的 <x:forEach>标签

<x:forEach>为对XML文件中同一名称元素的循环控制标签。它的属性和描述如表9.15所示:

9.15 <x:set>标签属性和说明

属性

描述

select

XPath表达式,结果是一个集合,将对该集合进行循环(可选)

begin

开始条件(可选)

end

结束条件(可选)

step

循环的步长,默认为1(可选)

var

做循环的对象变量名,表示XPath表达式结果集合中的一个对象(可选)

varStatus

显示循环状态的变量(可选)

下面看一个示例。

<x:forEach select="$xmlFileValue/xml-body/books/book" var="book">

${book}

</x:forEach>

该示例将使用循环读取XML中多个同存于books元素下的book子元素。

9.4.7  格式化XML显示数据的<x:transform>标签

<x:transform>标签允许使用XSLT(转换XML格式的语言)为页面的显示数据做格式化的处理。它的属性和描述如表9.16所示:

9.16 <x:transform>标签属性和说明

属性

描述

doc

XML的内容,该属性的内容应该为Stringjava.io.Readerjavax.xml.transform.Sourceorg.w3c.dom.Document的实例,或者从<x:parse><x:set>两个标签得到。可以用xml属性来替代,但是不被推荐(可选)

xslt

XSLT的内容,该属性的内容应该为Stringjava.io.Readerjavax.xml.transform.Source的实例(可选)

docSystemId

定义一个URI,该URI将被使用到XML文件中以接入其他资源文件。可以用xml SystemId属性来替代,但是不被推荐(可选)

xsltSystemId

定义一个URI,该URI将被使用到XSLT文件中以接入其他资源文件(可选)

var

将格式化后的XML文件保存在该属性所指定的变量中,保存的变量为org.w3c.dom.Document接口类型(可选)

scope

变量的作用范围(可选)

result

保存转化结果的变量,保存的变量为javax.xml.transform.Result类型的实例(可选)

下面看一个示例:

<c:import var="xmlFile" url="http://localhost:8080/booksamplejstl/SampleXml.xml" />

<c:set var="xsltdoc">

         <?xml version="1.0"?>

         <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

                   <xsl:template match="/">

                            <xsl:apply-templates />

                   </xsl:template>

                   <xsl:template match="xml-body">

                            <html>

                                     <head></head>

                                     <body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0">

                                               <h2>

                                                        UserName

                                                        <xsl:value-of select="name" />

                                               </h2>

                                               <h2>

                                                        PassWord

                                                        <xsl:value-of select="passWord" />

                                               </h2>

                                               <h2>

                                                        age

                                                        <xsl:value-of select="age" />

                                               </h2>

                                     </body>

                            </html>

                   </xsl:template>

         </xsl:stylesheet>

</c:set>

<x:transform xslt="${xsltdoc}" doc="${xmlFile}" />

这个示例将XML文件保存的数据信息利用<c:import>保存在“xmlFile”中,然后使用<c:set>标签保存一个XSLT的源到“xsltdoc”,最后通过<x:transform>格式化XML文件的数据显示在页面上。