xsl传递参数在客户端单个xml分框架显示

xml|客户端|显示

  通过向xsl传递参数+数据岛方式,实现在客户端单个xml的分框架显示。

  对于数据较少的xml数据,可以使用一次下载完所有数据,将显示全部放到客户端完成,下面例子中,将一个xml文件显示为左右两个框架,左边显示条目,右边显示内容。可以在本地,不用通过服务器解释.

  关键:使用msxml的dom对象向xsl模板传递参数
  环境: IE6 + Msxml3.0

  examples:

  /*** book.xml ***/

<?xml version="1.0" encoding="gb2312" ?>
<?xml-stylesheet type="text/xsl" href="book.xsl"?>
<moonpiazza>
 <book ID="1">
      <书名>基于XML 的 ASP.NET开发</书名>
   <定价>42</定价>
      <作者>Dan Wahlin/王宝良</作者>
 </book>
 <book ID="2">
      <书名>XML应用的UML建模技术</书名>
      <定价>32</定价>
      <作者>David Carlson/周靖 侯奕萌 沈金河等</作者>
 </book>
 <book ID="3">
      <书名>极限编程研究</书名>
      <定价>70</定价>
      <作者>Giancarrio Succi/Michele Marchesi/张辉(译)</作者>
 </book>
 <book ID="4">
      <书名>Design Patterns</书名>
      <定价>38</定价>
      <作者>Erich Gamma/Richard Helm/Ralph Johnson/John Vlissides</作者>
 </book>
</moonpiazza>
  /*** book.xsl ***/
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
<xsl:comment>
<![CDATA[
var m_oXSL ; 
var m_sFrameAttr_left, m_sFrameAttr_main ;
var m_sXMLFile, m_sXSLTFile ;
m_sXMLFile = "" ;
m_sXSLTFile = "book_view.xsl"; // 指定xsl文件
function window.onload()
{
 var oXSLDoc ; 
 m_sFrameName_left = "left_frame"; 
 m_sFrameName_main = "main_frame";

 m_oXSL = new ActiveXObject("MSXML2.XSLTemplate.3.0");
 oXSLDoc = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.3.0");
 oXSLDoc.async = false;
 oXSLDoc.load(m_sXSLTFile);
 m_oXSL.stylesheet= oXSLDoc;
 initPage() ;
}
function initPage()
{
 content.cols = "270,*" ;
 viewFrame(m_sFrameName_left);
 var  sHtmlStr = "请选择书目...";
 eval(m_sFrameName_main + ".document").open ("text/html","gb2312");
 eval(m_sFrameName_main + ".document").write(sHtmlStr) ;  
}
function viewFrame(p_sFrameName)
{
 var oXSLProc;
 var sHtmlStr;
 oXSLProc  = m_oXSL.createProcessor();
 oXSLProc.input = xmlData;
 // 指定参数,显示左(或右)框架
 oXSLProc.addParameter("frameName_left", m_sFrameName_left);
 oXSLProc.addParameter("frameName_main", m_sFrameName_main);
 oXSLProc.addParameter("frameName", p_sFrameName);
 oXSLProc.transform();
 sHtmlStr = oXSLProc.output ; // 获得转化后的字符串
 eval(p_sFrameName + ".document").open ("text/html","gb2312");
 eval(p_sFrameName + ".document").write(sHtmlStr) ;
}
function viewData(p_sDataID)
{
 var oXSLProc;
 var sHtmlStr;
 oXSLProc  = m_oXSL.createProcessor();
 oXSLProc.input = xmlData;
 
 // 指定参数,显示id为 p_sDataID 的数据
 oXSLProc.addParameter("frameName_left", m_sFrameName_left);
 oXSLProc.addParameter("frameName_main", m_sFrameName_main);
 oXSLProc.addParameter("frameName", m_sFrameName_main);
 oXSLProc.addParameter("DataID", p_sDataID);
 oXSLProc.transform();
 sHtmlStr = oXSLProc.output ; // 获得转化后的字符串
 eval(m_sFrameName_main + ".document").open ("text/html","gb2312");
 eval(m_sFrameName_main + ".document").write(sHtmlStr) ;
}
]]> 
</xsl:comment>

</SCRIPT>
</head>
<xml id="xmlData">
 <xsl:copy-of select="*"  />
</xml>
<frameset cols="0,*" name="content">
 <frame name="left_frame" src="about:blank" />
 <frame name="main_frame"  src="about:blank" />
</frameset>
</html>
</xsl:template>
</xsl:stylesheet> 

/*** book_view.xsl ***/
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="frameName_left" select="'left_frame_null'" />
<xsl:param name="frameName_main" select="'main_frame_null'" />
<xsl:param name="frameName" select="''" />
<xsl:param name="DataID" select="''" />
<xsl:template match="/">
<html>
<head>
<style type="text/css">
body
{
 font-size:9pt;
}
td
{
 font-size:9pt;
}
a{
 font-size:9pt;
}
</style>
</head>
 <xsl:choose>
  <xsl:when test="$frameName = $frameName_left">
   <xsl:call-template name="left_frame" /> 
  </xsl:when>
  <xsl:when test="$frameName = $frameName_main">
   <xsl:call-template name="main_frame" /> 
  </xsl:when>
 </xsl:choose>
</html>
</xsl:template>
<xsl:template name="left_frame">
 <xsl:for-each select="moonpiazza/book">
  <xsl:element name="a">
   <xsl:attribute name="href">
    javascript:parent.viewData(<xsl:value-of select="@ID" />);
   </xsl:attribute>
   <xsl:value-of select="书名" />
  </xsl:element>
  
  <br/>
 </xsl:for-each>
</xsl:template>
<xsl:template name="main_frame">
<xsl:choose>
 <xsl:when test="$DataID != ''">
  <table border="1" width="500">
   <xsl:for-each select="moonpiazza/book[@ID = $DataID]/*">
    <tr>
     <td width="70"><xsl:value-of select="name()" /></td>
     <td><xsl:value-of select="." /></td>
    </tr>
   </xsl:for-each>
  </table>  
 </xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet> 

时间: 2024-10-30 15:40:57

xsl传递参数在客户端单个xml分框架显示的相关文章

JAVA 写的webService,我用soapclient客户端调用,怎么传递参数及i进去啊

问题描述 如题,我现在的问题,1.提示"No'Access-Control-Allow-Origin'headerispresentontherequestedresource.Origin'null'isthereforenotallowedaccess."这个怎么解决,怎么在服务端加Crossdomain支持?2.使用SOAPClientParameters方法传递参数给wsdl.总是不成功.varp=newSOAPClientParameters();p.add('key1',&

WML教程4:跳转和传递参数

教程 任务与导航-跳转和传递参数go的基本属性和应用 实现Card之间跳转的一个基本方法是go,go和do.anchor等标签的结合是WML高级应用的一个基础. 相关属性: href:声明链接的URL sendreferer:表示是否传递调用href所指定的URL的页面的URL,也就是当前页的URL,即HTTP头中的HTTP_REFERER,默认值为false,可选值为true method:WML的method与HTTP提交表单的方法类似,同样有Post和Get两种,缺省参数为Get. Pos

javascript向jsp传递参数的一种手段:使用xmlhttp对象

javascript|js|xml|对象 xmlhttp对象可以用来在不刷新页面的情况下传递参数,可作为一种javascript向jsp传递参数的一种方法. 下面就是一个javascript向jsp传递参数的例子: xmlhttp.jsp <%@ page contentType="text/html; charset=GB2312" language="java" import="java.util.*" import="jav

Jsp页面URL中传递参数乱码的方法

  Jsp页面在URL中传递参数会出现乱码 解决方法如下: 一.使用更改Tomcat的方法.这个方法简单,但是需要改动的地方是服务器软件级别的,如果稍微变动系统将无法正确转码,移植性不高. 1.来到tomcat目录,找到conf目录下的server.xml问价,打开,找到标签,在最后添加URIEncoding='GBK',效果如下: view plaincopy to clipboardprint? port="8080"maxThreads="150"minSpa

参数传递-Android如何给asp网页传递参数?

问题描述 Android如何给asp网页传递参数? 我想做一个学校图书馆的手机客户端,图书馆网页http://222.24.94.225/gdlisnet/ReaderLogin.aspx登陆时需选择登录方式,学号和密码.然后登陆成功跳转到http://222.24.94.225/gdlisnet/ReaderTable.aspx.我使用一下传递参数, String url = "http://222.24.94.225/gdlisnet/ReaderLogin.aspx?"; Htt

Android应用开发(三):如何完成Activity之间的传递参数

本文介绍如何在Activity之间传递参数,该参数包括简单数据.包Bundle(提供2种方法,即有和无Bundle的两种方法).值对象(提供2种方法,即Serializable和Parcelable的两种方法),最后介绍如何获取Activity的返回参数.以上所介绍的内容都提供了操作步骤和源码以便于大家交流与分享心得.   1.在Activity之间传递简单数据 (1).新建Button 在activity_main.xml中加入如下代码: <Button android:layout_widt

android 第一次启动 传递参数问题!

问题描述 android 第一次启动 传递参数问题! 类似百度云盘,下载某个资源时候,网页上有个高速下载按钮,点击然后下载下来的是百度云盘,然后云盘启动后就开始载你之前下地址的那个文件. 类似这个需求,android程序是怎么在启动后得知需要下载那个资源的? 解决方案 本地存放一个资源地址列表,每次进入程序就判断网络的资源地址列表和本地列表是否有不同,不同的就下载并替换资源,相同的就不下载,网络的地址资源列表存在而本地不存在的地址也下载其资源,同时更新本地资源列表.如果都相同,就不用更新,也不用

《C#多线程编程实战(原书第2版)》——1.9 向线程传递参数

1.9 向线程传递参数 本节将描述如何提供一段代码来使用要求的数据运行另一个线程.我们将介绍不同的方式来满足此任务,并且回顾常见的错误. 1.9.1 准备工作 为了学习本节,你需要安装Visual Studio 2015.除此之外无需其他准备.本节的源代码放置在BookSamples\Chapter1\Recipe8目录中. 1.9.2 实现方式 请执行以下步骤来了解如何给一个线程传递参数: 1.启动Visual Studio 2015.新建一个C#控制台应用程序项目. 2.在Program.c

17_Android中Broadcast详解(有序广播,无序广播)最终广播,Bundle传递参数,传递参数的时候指定权限

 1  Broadcast是Android中的四大组件之一,他的用途很大,比如系统的一些广播:电量低.开机.锁屏等一些操作都会发送一个广播. 2  广播被分为两种不同的类型:"普通广播(Normalbroadcasts)"和"有序广播(Ordered broadcasts)".普通广播是完全异步的,可以在同一时刻(逻辑上)被所有广播接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播:然后有序广