新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论XSL,XSLT,XSL-FO,CSS等技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XSL/XSLT/XSL-FO/CSS 』 → 请各位高手帮助解决XSL分页后的超级链接问题。 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4887 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 请各位高手帮助解决XSL分页后的超级链接问题。 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     wlpx 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:16
      积分:125
      门派:XML.ORG.CN
      注册:2007/5/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给wlpx发送一个短消息 把wlpx加入好友 查看wlpx的个人资料 搜索wlpx在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看wlpx的博客楼主
    发贴心情 请各位高手帮助解决XSL分页后的超级链接问题。

    大家好:

          我想用XML来管理和展示一些用户的基本资料。同时通过HTML或XSL来实现页面显示。

          我最关键的要求是:资料能够分页显示和资料列表中实现超级链接。至于前台排序和前台控制分页显示数,这两个功能可以不用。

          下面是我找到的分页排序的文章,这里引用XML的内容是用:  


    <xsl:for-each select="./*">

    <td><xsl:value-of select="."/></td>

    这样的通配符,但是我想在某些项目上加上超级链接。

    我把孟老大的XML文件中<姓名></姓名>后面 增加了一组 <网址>www.163.com</网址>

    想实现的效果是:

    1、将这个超级链接附到<姓名></姓名>上,点击<姓名></姓名>中间内容时实现对 <网址></网址>中间的地址的访问。

    2、在<电子邮件></电子邮件>中,实现点击其中内容实现对,自己内容链接地址的访问。

    我只知道正常的超级链接是添加方式是这样的。

    <td><a><xsl:attribute name="href"><xsl:value-of select="网址" /></xsl:attribute><xsl:value-of select="姓名"/></a></td>

    <td><a><xsl:attribute name="href"><xsl:value-of select="电子邮件" /></xsl:attribute><xsl:value-of select="电子邮件"/></a></td>

    但问题是,在排序和分页的命令中,他们用的是 <td><xsl:value-of select="."/></td>

    哪位高手能帮助修改一下,实现对<姓名></姓名>和<电子邮件></电子邮件>等这样的子项的分别设置。

    如果和这功能和排序有冲突,那么可以不实现前台的排序。不知哪位高手能够帮助解决。十分感谢!

    <HTML>
    <Head>
    <META http=equiv="Content-Type" Content="text/html;charset=gb2312">
    <STYLE>
    body { font-family:宋体; font-size:11pt;}
    th { font-family:宋体; font-size:11pt; font-weight:bold;}
    </STYLE>
    <Script language="vbscript">
    Option Explicit

    Dim intRecordsPerPage        '每个页面显示的记录数        
    intRecordsPerPage = 6        '每个页面显示的记录数,默认设定为6

    ' 更新显示页面的函数
    Function window_onload()

    ' 显示设定的记录数
    Style.XMLDocument.selectNodes("//xsl:for-each/@select")(1).Value = "./*[position() < " & intRecordsPerPage + 1 & " and position() > 0]"
    transform()            
    setPageCount()

    End Function

    ' 进行XML-XSLT转换,并显示当前记录的一些信息
    Function transform()
    temp.loadXML (Data.transformNode(SortData.DocumentElement))

    DisplayArea.innerHTML = temp.transformNode(Style.DocumentElement)            
    RecordsPerPage.Value = intRecordsPerPage

    End Function

    ' 重新转换XML,并显示一个状态信息
    Function redisplay(intPage)

    Dim strDisplay
    Dim intPageCount
    Dim intRecordCount

    ' 保存状态信息
    intPageCount = PageCount.innerHTML            
    intRecordCount = RecordCount.innerHTML                        
    transform()            
    ' 显示状态信息
    PageCount.innerHTML = intPageCount            
    RecordCount.innerHTML = intRecordCount            
    CurrentPage.innerHTML = intPage

    End Function

    ' 重新排序和显示
    Function Sort(strField)

    Dim sortField
    Dim sortOrderAttribute            
    ' 得到排序属性值
    Set sortField = SortData.XMLDocument.selectSingleNode("//xsl:sort/@select")
    Set sortOrderAttribute = SortData.XMLDocument.selectSingleNode("//xsl:sort/@order")

    ' 改变排序的方式
    If sortField.Value = strField Or sortField.Value = "./*[0]" Then
    If sortOrderAttribute.Value = "descending" Then
    sortOrderAttribute.Value = "ascending"
    Else
    sortOrderAttribute.Value = "descending"
    End If
    Else
    sortField.Value = strField
    sortOrderAttribute.Value = "ascending"
    End If

    Set sortField = Nothing
    Set sortOrderAttribute = Nothing

    redisplay (CurrentPage.innerHTML)

    End Function

    ' 重新设置每页的记录数
    Function setRecordsPerPage()

    If IsNumeric(RecordsPerPage.Value) Then        
    intRecordsPerPage = CInt(RecordsPerPage.Value)            
    window_onload                
    End If

    End Function

    ' 显示页数信息
    Function setPageCount()

    Dim intTotalRecords

    PageCount.innerHTML = getNumberOfPages(intTotalRecords)            
    RecordCount.innerHTML = intTotalRecords            
    CurrentPage.innerHTML = 1

    End Function

    ' 计算总页数和总记录数
    Function getNumberOfPages(intTotalRecords)

    Dim intPages

    intTotalRecords = Data.XMLDocument.selectNodes("/*/*").length           
    intPages = intTotalRecords / intRecordsPerPage            
    If InStr(intPages, ".") > 0 Then
    intPages = CInt(Left(intPages, InStr(intPages, "."))) + 1
    End If

    getNumberOfPages = intPages

    End Function

    ' “下一页”的处理
    Function nextPage(intPage)

    Dim strDisplay
    Dim strDateRange

    If CInt(CStr(intPage) * intRecordsPerPage) < Data.selectNodes("/*/*").length Then                                    
    intPage = CInt(intPage) + 1
    Style.XMLDocument.selectNodes("//@OnClick")(1).Value = "previousPage(" & intPage & ")"
    Style.XMLDocument.selectNodes("//@OnClick")(2).Value = "nextPage(" & intPage & ")"
    Style.XMLDocument.selectNodes("//xsl:for-each/@select")(1).Value = "./*[position() <= " & (CStr(intPage) * intRecordsPerPage) & " and position() > " & (CInt(intPage) - 1) * intRecordsPerPage & "]"
    redisplay (intPage)                                                
    End If

    End Function

    ' 处理“上一页”
    Function previousPage(intPage)

    Dim strDisplay
    Dim strDateRange

    If intPage > 1 Then            
    intPage = CInt(intPage) - 1            
    Style.XMLDocument.selectNodes("//@OnClick")(1).Value = "previousPage(" & intPage & ")"
    Style.XMLDocument.selectNodes("//@OnClick")(2).Value = "nextPage(" & intPage & ")"
    Style.XMLDocument.selectNodes("//xsl:for-each/@select")(1).Value = "./*[position() <= " & (CStr(intPage) * intRecordsPerPage) & " and position() > " & (CInt(intPage) - 1) * intRecordsPerPage & "]"
    redisplay (intPage)            
    End If

    End Function

    ' “第一页”的处理
    Function FirstPage()

    Style.XMLDocument.selectNodes("//@OnClick")(1).Value = "previousPage(1)"
    Style.XMLDocument.selectNodes("//@OnClick")(2).Value = "nextPage(1)"
    Style.XMLDocument.selectNodes("//xsl:for-each/@select")(1).Value = "./*[position() < " & intRecordsPerPage + 1 & " and position() > 0]"
    transform()            
    setPageCount()

    End Function

    ' “最末页”的处理
    Function LastPage()

    Dim intTotalPages
    Dim intTotalRecords

    intTotalPages = getNumberOfPages(intTotalRecords)
    nextPage (intTotalPages - 1)

    End Function
    </Script>
    </Head>
    <body>

    <XML id='Data'>
    <客户关系表 xmlns:dt="urn:schemas-microsoft-com:datatypes">
    <客户><序号 dt:dt="int">01</序号><姓名>dotey</姓名><网址>www.163.com</网址><电子邮件>http://www.webuc.net</电子邮件></客户>
    <客户><序号 dt:dt="int">02</序号><姓名>孟子E章</姓名><网址>www.163.com</网址><电子邮件>mengxianhui@21cn.com</电子邮件></客户>
    <客户><序号 dt:dt="int">03</序号><姓名>宝玉</姓名><网址>www.163.com</网址><电子邮件>junminliu@msn.com</电子邮件></客户>
    <客户><序号 dt:dt="int">04</序号><姓名>http://lucky.myrice.com</姓名><网址>www.163.com</网址><电子邮件>Karry@163.net</电子邮件></客户>
    <客户><序号 dt:dt="int">05</序号><姓名>http://colorweb.go.163.com</姓名><网址>www.163.com</网址><电子邮件>vivki@sina.com</电子邮件></客户>
    <客户><序号 dt:dt="int">06</序号><姓名>Frank</姓名><网址>www.163.com</网址><电子邮件>net_lover@mengxianhui.com.cn</电子邮件></客户>
    <客户><序号 dt:dt="int">07</序号><姓名>Greg</姓名><网址>www.163.com</网址><电子邮件>meng@mengxianhui.com</电子邮件></客户>
    <客户><序号 dt:dt="int">08</序号><姓名>Harry</姓名><网址>www.163.com</网址><电子邮件>sunny@xianhui.net</电子邮件></客户>
    <客户><序号 dt:dt="int">09</序号><姓名>Ingrid</姓名><网址>www.163.com</网址><电子邮件>cathy@hotmail.com</电子邮件></客户>
    <客户><序号 dt:dt="int">10</序号><姓名>Jeff</姓名><网址>www.163.com</网址><电子邮件>your@mxh.com</电子邮件></客户>
    <客户><序号 dt:dt="int">11</序号><姓名>Kelly</姓名><网址>www.163.com</网址><电子邮件>Iloveyou@mengxianhui.com</电子邮件></客户>
    <客户><序号 dt:dt="int">12</序号><姓名>Larry</姓名><网址>www.163.com</网址><电子邮件>smilling@mengxianhui.com</电子邮件></客户>
    <客户><序号 dt:dt="int">13</序号><姓名>Mark</姓名><网址>www.163.com</网址><电子邮件>money@21cn.com</电子邮件></客户>
    <客户><序号 dt:dt="int">14</序号><姓名>Nancy</姓名><网址>www.163.com</网址><电子邮件>www@yahoo.com</电子邮件></客户>
    <客户><序号 dt:dt="int">15</序号><姓名>Peter</姓名><网址>www.163.com</网址><电子邮件>dotnet@aol.com</电子邮件></客户>
    <客户><序号 dt:dt="int">16</序号><姓名>Rachel</姓名><网址>www.163.com</网址><电子邮件>billgates@microsoft.com</电子邮件></客户>
    <客户><序号 dt:dt="int">17</序号><姓名>Seth</姓名><网址>www.163.com</网址><电子邮件>flying@yous.net</电子邮件></客户>
    <客户><序号 dt:dt="int">18</序号><姓名>Tim</姓名><网址>www.163.com</网址><电子邮件>agooyboy@lovegirl.com</电子邮件></客户>                                
    </客户关系表>
    </XML>

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

    <xsl:template match="客户关系表">
    <?xml version="1.0" encoding="GB2312"?>
    <客户关系表>
    <xsl:for-each select="客户">
    <xsl:sort select="姓名" order="ascending"/>
    <客户>
    <序号><xsl:value-of select="序号" /></序号>
    <姓名><xsl:value-of select="姓名" /></姓名>
    <电子邮件><xsl:value-of select="电子邮件" /></电子邮件>
    </客户>
    </xsl:for-each>
    </客户关系表>
    </xsl:template>

    </xsl:stylesheet>
    </XML>
    <XML id='Style'>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://lucky.myrice.com" version="1.0">
    <msxsl:script language="VBScript" implements-prefix="user">
    <![CDATA[
    Function getName(node)
    getName = node.Item(0).nodeName
    End Function  
    ]]>
    </msxsl:script>

    <xsl:template match="/">
    <xsl:apply-templates select="/*"/>                                        
    </xsl:template>

    <xsl:template match="/*">
                                           
    <Table WIDTH="100%" BORDER="0" cellpadding="0" cellspacing="1" style="font-size:11pt" bgcolor="#0099ff">                
    <tr bgcolor="#FF6600" style="cursor: hand;padding:5px">
    <xsl:for-each select="./*[1]/*">
    <td align="center">
    <xsl:attribute name="onclick">
    Sort('<xsl:value-of select="user:getName(.)"/>')
    </xsl:attribute>
    <font color="#EEEEEE"><b><u><xsl:value-of select="user:getName(.)"/></u></b></font>
    </td>                                
    </xsl:for-each>
    </tr>                
    <xsl:for-each select="./*[position() < 6 and position() > 0]">                                
    <tr bgcolor="#FFCCFF">

                                                                                                                            
    <xsl:for-each select="./*">


    <td><xsl:value-of select="."/></td>


                                                                                                                                   
    </xsl:for-each>
    </tr>                                        
    </xsl:for-each>                        
    </Table>        

                                  
    <table width="100%" border="0" style="font-size:9pt">
    <tr>
    <td align="left"><b>第 <span id="CurrentPage"></span> 页 总 <span id="PageCount"></span> 页    共有 <span id="RecordCount"></span> 条记录</b></td>
    <td align="right"><b>每页记录数:<input onBlur="setRecordsPerPage()" id="RecordsPerPage" style="vertical-align:middle;height:15pt;width:30px"/></b></td>                                
    <td align="right">                                        
    <span id="Paging">
    <input type="button" OnClick="FirstPage()" value="第一页"/>
    <input type="button" OnClick="previousPage(1)" value="上一页"/>
    <input type="button" OnClick="nextPage(1)" value="下一页"/>
    <input type="button" OnClick="LastPage()" value="最末页"/>
    </span>                                                        
    </td>
    </tr>
    </table>
    </xsl:template>                        
    </xsl:stylesheet>
    </XML>
    <XML id="temp"/>
    <div id="DisplayArea"></div>

    </body>
    </HTML>


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/6/14 8:55:00
     
     limpbizkit 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:6
      积分:61
      门派:XML.ORG.CN
      注册:2007/4/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给limpbizkit发送一个短消息 把limpbizkit加入好友 查看limpbizkit的个人资料 搜索limpbizkit在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看limpbizkit的博客2
    发贴心情 
    我也遇到过这类问题
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/6/20 21:50:00
     
     limpbizkit 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:6
      积分:61
      门派:XML.ORG.CN
      注册:2007/4/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给limpbizkit发送一个短消息 把limpbizkit加入好友 查看limpbizkit的个人资料 搜索limpbizkit在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看limpbizkit的博客3
    发贴心情 
    help
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/6/20 21:50:00
     
     qqvista 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:0
      积分:54
      门派:XML.ORG.CN
      注册:2007/11/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给qqvista发送一个短消息 把qqvista加入好友 查看qqvista的个人资料 搜索qqvista在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看qqvista的博客4
    发贴心情 
    帮你实现 email ,

    <xsl:choose>
    <xsl:when test="name()='电子邮件'">
    <font color="yellow"><a><xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute><xsl:value-of select="."/></a></font>
    </xsl:when>

    <xsl:otherwise>
    <font color="blue"><xsl:value-of select="."/></font>
    </xsl:otherwise>
    </xsl:choose>

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/11/8 12:07:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/9/23 3:00:41

    本主题贴数4,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    110.352ms