zsww-成功源于创新!

使用ASP.NET页面创建可视的UI,在客户机上实例化MSXML分析器的页面从中间层组件取出XML数据、操作并显示 并有问题请高手解决

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转换进行分页处理??

posted on   zsww  阅读(2786)  评论(1编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
< 2004年6月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10

导航

统计

点击右上角即可分享
微信分享提示