惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - zsww

水晶报表使用经验谈5--使用格式化编辑器 推荐一个好工具: 可以集成在Microsoft Outlook里的“新闻阅读器” NewsGator 水晶报表使用经验谈4--使用视图解决在报表中的多表关联问题 最新体验Visual Studio 2005 Beta 1 to 管理员:网站的“技术区文章列表RSS”有问题 我用GUSH连不上! 微软发布SQL Server 2000 Reporting Services Service Pack 1 通过Web服务外置XML,将Web服务用作数据源,Web服务传递的内容是XML,将由Web服务返回的XML文档,以便可以将它加载到客户机上的XML分析器。 SQL Reporting Services 困惑的解决 直接传递参数并用ReportViewer来呈现报表 我的困惑 关于SQL Reporting Services 微软的服务! SQL Reporting Services 使用感受 SQL Reporting Services 简介 微软的报表工具 SQL Server 2000 Reporting Services 评估版 进入博客园首页 怎么出现这种错误?不知其他人有没有??? 两三天没来 真的很热闹啊 感觉这里越来越好了! 水晶报表使用经验谈3--在报表中显示多个表的字段(通过表关联) 水晶报表使用经验谈2--使用sql语句直接生成dataset做为报表的数据源! 水晶报表使用经验谈1--建立水晶报表第一步及编译最易出现错误的解决方法及报表转换成pdf文档进行打印方法 aspx论坛页面原型发布 请大家多提意见!
使用ASP.NET页面创建可视的UI,在客户机上实例化MSXML分析器的页面从中间层组件取出XML数据、操作并显示 并有问题请高手解决
zsww · 2004-06-11 · via 博客园 - zsww

1. 一个简单案例:客户机通过输入用户ID或用户名称搜索用户,客户机使用Ie5.0及以上版本。

2. 基本思路:将要发送的客户机的XML数据来至于数据访问层,数据被数据访问组件外置成DataSet,从DataSet提取XML数据并使用DataSet的GetXml或WriteXml方法将数据传递到客户机,然后通过网络将XML作为纯文本传送给客户机,在客户机它被加载到客户机端XML分析器准备使用。

3. 具体实现(代码仅供参考):
   中间层组件 customer-data.aspx:从数据库中取出数据生成DataSet,并返回Xml文档。
     Page_Load
     {
        DataSet ds=new DataSet();
        ds=GetDataSet();
        Response.ContentType="text/xml";
        Response.Write("<?xml version='1.0'?>");
        ds.WriteXml(Response.OutputStream);
     }
       
   HTML表示层(客户机端):
   (1)用javascript声明一个全局变量保存MSXML分析起实例,创建一个loadCustomerList函数,此函数以声明中间层组件的URL开始,实例化需要的MSXML分析器对象,同时检查实例化是否成功。
        <body onload="loadCustomerList()">

        var objXMLData ;
        function loadCustomerList() {      
          var strURL = 'customer-data.aspx'; 
          try {
             objXMLData = new ActiveXObject('MSXML2.FreeThreadedDOMDocument'); //使用MSXML分析器版本2,并且使用免费的线程版本(因为后面要用到XSLT样式表)
          }
          catch(e) {} 
          if (objXMLData == null) {
             //报错,提示没有安装正确的MSXML版本
             return;
          }       
          objXMLData.onreadystatechange = changeFunction; //changeFunction函数负责在XML已经结束加载时监督检查
          objXMLData.validateOnParse = true; //有效性验证
          objXMLData.async = true;  //异步加载XML
          objXMLData.load(strURL); //加载XML文档
        }
       
        function changeFunction() {
          // 检查XML分析器的readyState值
          // 当值为4时,表明加载或者完成了或者在加载XML时出现了错误
          if (objXMLData.readyState == 4) {
              if (objXMLData.parseError.errorCode != 0)
                 //加载XML时出现了错误               
              else {
                //加载完成                 
              }
          }
        }
       
   (2)查找并显示顾客详细资料: 用户使用文本搜索框来搜索客户而不发生给服务器的回送,不管执行多少次搜索(为了提供更高更快的响应和用户接口)。
        <button id="btnSearch"  onclick="doSearch('CustomerID')"></button>
       
        function doSearch(strSortOrder) {
          //得到用户ID或用户姓名,strSortOrder是排序参数
          //转换XML文档 并把转化后的结果存入一变量         
          var strResult = getStyledResult(strCustID, strCustName, strSortOrder);
          if (strResult.length > 0) {
              //呈现strResult
          }
          else {
              //没有符合的数据
          } 
         }
               
        function getStyledResult(strCustID, strCustName, strSortOrder) {
          //使用XSLT样式表转换XML文档 
          //建立XPath字符串
          if (strCustID.length > 0)
              var strXPath = 'descendant::Customers[starts-with(child::CustomerID, $custid)]'
          else
              var strXPath = 'descendant::Customers[contains(child::CompanyName, $custname)]';

          //创建样式表代码
          var strStyle = '<?xml version="1.0" ?>\n'
          + '<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">\n'
          + ' <xsl:param name="custid" />\n'
          + ' <xsl:param name="custname" />\n'
          + ' <xsl:template match="/">\n'
          + '  <table id="tblCustomers" cellspacing="0" cellpadding="5"\n'
          + '         rules="cols" border="1" style="border-collapse:collapse;">\n'
          + '   <tr style="background-color:silver;">\n'
          + '    <td align="center">\n'
          + '      <a href="javascript:doSearch(\'CustomerID\')"><b>ID</b></a>\n'
          + '    </td>\n'
          + '    <td align="left">\n'
          + '      <a href="javascript:doSearch(\'CompanyName\')"><b>Customer Name</b></a>\n'
          + '    </td>\n'
          + '    <td align="left">\n'
          + '      <a href="javascript:doSearch(\'City\')"><b>City</b></a>\n'
          + '    </td>\n'
          + '    <td></td>\n'
          + '   </tr>\n'
          + '   <xsl:for-each select="' + strXPath + '">\n'
          + '    <xsl:sort select="' + strSortOrder + '" data-type="text" order="ascending" />\n'
          + '     <tr>\n'
          + '      <td align="center" style="background-color:#add8e6;">\n'
          + '       <xsl:value-of select="CustomerID" />\n'
          + '      </td>\n'
          + '      <td align="left">\n'
          + '       <a>\n'
          + '         <xsl:attribute name="href">\n'
          + '          view-orders.aspx?customerid=<xsl:value-of select="CustomerID" />\n'
          + '         </xsl:attribute>\n'
          + '         <xsl:value-of select="CompanyName" />\n'
          + '       </a>\n'
          + '      </td>\n'
          + '      <td align="left">\n'
          + '       <xsl:value-of select="City" />\n'
          + '      </td>\n'
          + '      <td align="left">\n'
          + '       <a>\n'
          + '         <xsl:attribute name="href">\n'
          + '          ../../update-orders/ie5/edit-orders.aspx?customerid=<xsl:value-of select="CustomerID" />\n'
          + '         </xsl:attribute>\n'
          + '         Edit Orders\n'
          + '       </a>\n'
          + '      </td>\n'
          + '     </tr>\n'
          + '   </xsl:for-each>\n'
          + '  </table>\n'
          + ' </xsl:template>\n'
          + '</xsl:stylesheet>';
 
          var objXMLStyle = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');         
          objXMLStyle.loadXML(strStyle);         
          var objTemplate = new ActiveXObject('MSXML2.XSLTemplate'); //创建一个MSXML XSLTemplate实例,并指定它的stylesheet属性
          objTemplate.stylesheet = objXMLStyle;         
          var objProc = objTemplate.createProcessor();  //创建一个XSLProcessor对象    
          objProc.input = objXMLData;  //处理objXMLData文档 
          objProc.addParameter('custid', strCustID);  //指定参数
          objProc.addParameter('custname', strCustName);       
          if (objProc.transform() == true)  //判断是否转换成功
          var strResult = objProc.output
          else
             var strResult = '';
          return strResult;
          }

以上就是实现的基本思路和主要代码,如果有哪位老兄正在研究分布式数据应用,请一起讨论啊!

并有以下问题需要解决:
如何通过XSLT转换进行分页处理??