首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

3.测试模式:

在该模式中包括<xsl:if> <xsl:when>等语句。

前面曾经介绍过:XML技术的优势之一就在于数据输出时的可选择性,即选择需要的数据进行显示输出。前面我们所讲到的选择模式语句:<xsl:for-each><xsl:value-of>及匹配模式语句<xsl: template>只是简单的选取通过“/”符号层层到达的节点,那么如果我们对XML数据不需要全部输出,而只需要满足某条件的部分数据,就需要使用条件判断<xsl:if>与多条件判断<xsl:choose><xsl:when>等语句,其使用方式与传统的程序设计语言中的流程控制同样是类似的。

<xsl:if>的语法结构如下:

<xsl:if expr="script-expression" language="language-name" test="pattern">

其中,expr 属性用于设置脚本语言表达式,其计算结果为“真”或者“假”;如果计算结果为“真”,且通过test属性所设置的对原始数据的测试条件,则在输出中显示其中的内容(该属性可以省略)。

language属性用于设置expr属性中表达式的脚本语言类型,其取值与HTML标记scriptlanguage属性的取值相同,缺省为“JavaScript”。

test 属性用于指定对原始数据进行测试的条件。

下面通过一个实例进行说明,依然是针对前面案例中的template.xml文档,针对该文档采用XSTL中的模版以及<xsl:if>语句对其进行显示控制,对应的样式文件名称为“if.xsl”。注意修改XML文档中与设置样式文件位置和名称相关的语句。

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

      <!--根模版-->

      <xsl:template match="/">

             <html>

                   <head>

                         <title>学生成绩</title>

                   </head>

                   <body>

                         <xsl:apply-templates select="classmates/student" />

                  </body>

            </html>

      </xsl:template>

      <!--主体模版-->

      <xsl:template match="student">

             <table border="1" cellspacing="0">

                    <th>学号</th>

                    <th>姓名</th>

                    <th>成绩</th>

                    <tr>

                         <td>

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

                         </td>

                         <td>

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

                         </td>

                         <td>

                               <xsl:apply-templates select="toefl" />

                         </td>

                   </tr>

            </table>

      </xsl:template>

 

      <xsl:template match="toefl">

            <xsl:if test=".[value()$le$650]">

                   <xsl:attribute name="style">color:red</xsl:attribute>

            </xsl:if>

            <xsl:value-of />

      </xsl:template>

</xsl:stylesheet>

对应实现的效果如图3-32所示,可以看到托福成绩低于650的成绩以红色进行了显示。

3-32  进行显示控制之后的效果

在上面的例子中,$le$是关系运算符中的“小于等于”,对应的其他关系有小于($lt$)、大于($gt$)、大于等于($ge$)、等于($eq$)、不等于($ne$)等。“. ”表示引用当前标记,本例中为“toefl”,[ ]表示筛选,只有满足筛选条件的标记才能适用于对应的显示控制。value() XSTL中的函数,其他常用的函数还有text()end()index()等等。

如果我们希望对同一数据同时测试多个条件,根据不同条件输出相应结果。那么除了使用<xsl:if>语句之外,也可以使用<xsl:choose>语句,该语句的语法如下:

<xsl:choose>

<xsl:when expr="script-expression" language="language-name" test="pattern">

<xsl:otherwise>

其中<xsl:choose>表示一个多路选择分支的开始。<xsl:when>语句中相关属性的含义与<xsl:if>类似,这里不在赘述。<xsl:otherwise>表示如果有不满足<xsl:when>规定的条件,则按照此标记中的内容进行输出。

下面依然通过一个实例进行说明,针对前面案例中的template.xml文档,针对该文档采用XSTL中的模版以及<xsl:choose>语句对其进行显示控制,对应的样式文件名称为“choose.xsl”,注意修改XML文档中与设置样式文件位置和名称相关的语句。

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

      <!--根模版-->

      <xsl:template match="/">

            <html>

                  <head>

                        <title>学生成绩</title>

                  </head>

                  <body>

                        <xsl:apply-templates select="classmates/student" />

                  </body>

            </html>

      </xsl:template>

      <!--主体模版-->

      <xsl:template match="student">

            <table border="1" cellspacing="0">

                  <th>学号</th>

                  <th>姓名</th>

                  <th>托福成绩</th>

                  <tr>

                        <td>

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

                        </td>

                        <td>

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

                        </td>

                        <td>

                              <xsl:apply-templates select="toefl" />

                        </td>

                  </tr>

            </table>

      </xsl:template>

 

      <xsl:template match="toefl">

            <xsl:choose>

                  <xsl:when test=".[value()$ge$700]">优秀</xsl:when>

                  <xsl:when test=".[value()$gt$600]">一般</xsl:when>

                  <xsl:when test=".[value()$gt$500]">及格</xsl:when>

                  <xsl:otherwise>不及格</xsl:otherwise>

            </xsl:choose>

      </xsl:template>

</xsl:stylesheet>

对应实现的效果如图3-33所示,可以看到托福成绩根据实际的分数依据不同的评价等级进行了显示。

最后再通过两个实例介绍,如何综合使用上面介绍的相关语句实现对前面XML文件的显示。例如,我们针对xml1.xml文件中的数据,配合对应的XSTL实现对应数据信息的显示,

3-33  进行显示控制之后的效果

将对应的文件进行复制,得到xml2.xml。在项目“P35_XML”中新建一个XSTL文件,名称为xml2.xsl,对应的样式文件中样式的设置为:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

      <xsl:template match="/">

             <html>

                   <body>

                         <center>

                               <table border="1">

                                      <tr>

                                             <td>学号</td>

                                             <td>姓名</td>

                                             <td>GRE成绩</td>

                                      </tr>

                                      <xsl:for-each select="classmates/student">

                                              <tr>

                                                    <td>

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

                                                    </td>

                                                    <td>

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

                                                    </td>

                                                    <td>

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

                                                   </td>

                                              </tr>

                                      </xsl:for-each>

                               </table>

                         </center>

                   </body>

             </html>

      </xsl:template>

</xsl:stylesheet>

然后在原有的xml2.xml文件中添加新的一行如下所示,该行用于指定所需使用的样式表文件的类型、位置以及名称。

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="xml2.xsl"?>

<classmates>

      <student>

            <sid>1</sid>

            <sname>张桂元</sname>

            <gre>1700</gre>

            <toefl>630</toefl>

            <tse>120</tse>

      </student>

            ……

此时,在浏览器中再次直接打开xml1.xml文件的效果如图3-34所示。可以看到树型结构中的数据已经以表格的形式进行了相应的显示。

3-34  浏览器中配合XSLT显示XML文档的效果

下面再给出一个实现效果更加复杂的例子,在项目中新建一个XML的文档,名称为xml3.xml,在该文档中存储的是相关下载软件的列表信息,对应的文档内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="xml3.xsl" ?>

<搞笑中心软件店>

     <说明>此测试页使用XML语言制作,必须使用IE5.0或以上版本才能正常浏览.</说明>

     <软件列表>

         <软件>

              <序号>1</序号>

              <名称>Goodnight</名称>

              <作恶度>--</作恶度>

              <搞笑度>* * * *</搞笑度>

              <大小>633k</大小>

              <介绍>这不是恶作剧软件,但却是一首很好听的歌,动画也很有趣,建议送给baby

         </介绍>

              <网址>../main/soft/011goodnight.exe</网址>

         </软件>

 

         <软件>

              <序号>2</序号>

              <名称>搞怪鼠标(3</名称>

              <作恶度>* *</作恶度>

              <搞笑度>*</搞笑度>

              <大小 />

              <介绍>使鼠标突然变大。</介绍>

              <网址>../main/soft/024vigor.zip</网址>

         </软件>

 

         <软件>

              <序号>3</序号>

              <名称>模拟电话拨号程序</名称>

              <作恶度>* * * *</作恶度>

              <搞笑度>* * * *</搞笑度>

              <大小>70k</大小>

              <介绍>,.....电话响了,听听是谁来的电话!</介绍>

              <网址>../main/soft/051ringing.zip</网址>

         </软件>

         <软件>

              <序号>4</序号>

              <名称>电脑升级</名称>

              <作恶度>* * *</作恶度>

              <搞笑度>* * *</搞笑度>

              <大小>23k</大小>

              <介绍>经过这次软升级,可使你的内存效率提高16,硬盘效率提高10!(运行前c盘根目录下要有一个320x400,256色的bmp图像,文件名logo.sys,不然会出错)</介绍>

              <网址>../main/soft/052level.zip</网址>

         </软件>

 

     </软件列表>

     <版权说明>搞笑中心软件店版权所有</版权说明>

</搞笑中心软件店>

可以看到,这是一个标准的XML文档,特殊之处在于在该文档中使用了中文的标记名称。下面我们配合使用XSTL样式文件控制对应内容的显示。新建一个文件,名称为xml3.xsl,对应的样式内容如下:

<?xml version="1.0" encoding="GB2312" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">

       <xsl:template match="/">

              <br>

                   <b>

                        <div align="center">

                              <font color="#00aaaa">趣味软件大全</font>

                        </div>

                  </b>

            </br>

            <table border="1" cellpadding="1" cellspacing="1" width="760" align= "center">

                  <tr>

                        <th width="80" align="left">序号</th>

                        <th>名称</th>

                        <th>作恶度</th>

                        <th>搞笑度</th>

                        <th>大小</th>

                  </tr>

                  <xsl:for-each select="搞笑中心软件店/软件列表/软件">

                        <tr>

                              <td>

                                    <b>

                                          <xsl:value-of select="序号" />

                                    </b>

                              </td>

                              <td>

                                    <font color="#ff0000">

                                          <xsl:value-of select="名称" />

                                    </font>

                              </td>

                              <td>

                                    <xsl:value-of select="作恶度" />

                              </td>

                              <td>

                                    <xsl:value-of select="搞笑度" />

                              </td>

                              <td>

                                    <xsl:value-of select="大小" />

                              </td>

                        </tr>

                        <tr>

                              <th>介绍:</th>

                              <td colspan="4">

                                    <xsl:value-of select="介绍" />

                              </td>

                        </tr>

                        <tr>

                              <td colspan="5" align="right">

                                    <a target="_blank">

                                          <xsl:attribute name="href">

                                                <xsl:value-of select="网址" />

                                          </xsl:attribute>

                                          按此下载

                                    </a>

                              </td>

                        </tr>

                  </xsl:for-each>

            </table>

            <p align="center">

                  <xsl:value-of select="搞笑中心软件店/版权说明" />

            </p>

      </xsl:template>

</xsl:stylesheet>

注意在该例中实现超级链接的方式时,所使用的<xsl:attribute>标记。对应XML文档在页面中的显示效果如图3-35所示。

3-35  浏览器中配合XSLT显示XML文档的效果

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论