使用纯HTML的通用数据管理和服务

互联网 17-3-3
使用纯HTML的通用数据管理和服务。然而,为了收集数据,你需要一个数据储存库。要避免使用数据库服务器带来的很多问题,你可以在xml中收集这些数据。下面是我们的项目的基本结构:
<user>      <first_name/>      <last_name/>      <mi/>  </user>

我最初将数据限制为first name,last name和middle。这个页面之后的基本思想是用户信息在这个页面中获得。在用户信息需求得到满足以后,流程必须被转到下一个逻辑收集步骤。为了使事情变得简单,我将把用户功能包装到一个asp类中。

Function Coalesce(vVar, vAlt)      If vVal = "" Or VarType(vVal) = 1 Or VarType(vVal) = 0 Then          Coalesce = vAlt      Else          Coalesce = vVal      End If  End Function  Class CUser  PRivate m_SQL, m_DOM  Public Property Get DOM()      Set DOM = m_DOM  End Property  Public Sub saveUser()      m_SQL.save "save_user", m_DOM  End Sub  Public Function validate()      m_DOM.loadXML "<root>" & m_SQL.validateUser(m_DOM) & "</root>"      If Not m_DOM.selectSingleNode("//error") Is Nothing Then          validate = False      Else          validate = True      End If  End Function  Private Sub collectData(dom, oCollection)      Dim nItem, node, parent_node, n, sKey      For nItem = 1 To oCollection.Count          sKey = oCollection.Key(nItem)          Set parent_node = dom.selectSingleNode("//" & sKey & "s")          If Not parent_node Is Nothing Then              For n = 1 To oCollection(sKey).Count                  Set node = parent_node.selectSingleNode(sKey & _                                                          "[string(.)='" &  oCollection(sKey)(n) & "']")                  If node Is Nothing Then                      Set node = dom.createNode(1, sKey, "")                      Set node = parent_node.appendChild(node)                  End If                  node.text = Coalesce(oCollection(sKey)(n), "")              Next          Else              Set node = dom.selectSingleNode("//" & sKey)              If Not node Is Nothing Then _                  node.text = Coalesce(oCollection(sKey), "")          End If      Next  End Sub  Private Sub Class_Initialize()      Set m_SQL = New CSQL      Set m_DOM = Server.CreateObject("MSXML2.DOMDocument")      m_DOM.async = False      If VarType(Request ("txtUserXML")) = 0 Or Request ("txtUserXML") = "" Then          m_DOM.loadXML Request("txtUserXML")      Else          m_DOM.load "<root>" & Server.MapPath("user.xml") & "</root>"      End If      collectData m_DOM, Request.Form      collectData m_DOM, Request.QueryString  End Sub  Private Sub Class_Terminate()      Set m_SQL = Nothing      Set m_DOM = Nothing  End Sub  End Class  Class CSQL  Private m_DAL, m_Stream  Public Function save(sStoredProc, oDOM)      'adVarChar = 200      m_DAL.RunSP Array(m_DAL.mp("@xml_param", 200, 8000, oDOM.xml))  End Function  Public Function validateUser(oDOM)      Set m_Stream = m_DAL.RunSPReturnStream("validate_user", Array(_              m_DAL.mp("@xml_param", 200, 8000, oDOM.xml)))      validateUser = m_Stream.ReadText(-1)      m_Stream.Close  End Function  Private Sub Class_Initialize()      Set m_DAL = Server.CreateObject("MyPkg.MyDAL")      m_DAL.GetConnection "some connection string"      Set m_Stream = Server.CreateObject("ADODB.Stream")  End Sub  Private Sub Class_Terminate()      Set m_DAL = Nothing      Set m_Stream = Nothing  End Sub  End Class

CSQL类是基于一个数据访问层(m_DAL)组件MyPkg.MyDAL建立起来的。而这个组件则是基于Fitch和Mather DAL组件建立起来的,这两个组件可以从MSDN找到。这样我们就在SQL Server与你的代码建立了桥梁。

<?xml version="1.0"?>  <xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform      version="1.0">  <xsl:output method="html"/>  <xsl:template match="/">      <xsl:if test="//error">      <font color="red">*Information in red is required<br/></font>      </xsl:if>      <xsl:apply-templates select="//user"/>  </xsl:template>  <xsl:template match="user">      <font>          <xsl:attribute name="color">              <xsl:choose>                  <xsl:when test="//error[.='first name']">red</xsl:when>                  <xsl:otherwise>black</xsl:otherwise>              </xsl:choose>          </xsl:attribute>      First Name:      </font>      <input type="text" name="first_name">          <xsl:attribute name="value"><xsl:value-of  select="first_name"/></xsl:attribute>      </input><br/>      <font>          <xsl:attribute name="color">              <xsl:choose>                  <xsl:when test="//error[.='mi']">red</xsl:when>                  <xsl:otherwise>black</xsl:otherwise>              </xsl:choose>          </xsl:attribute>      MI:      </font>      <input type="text" name="mi">          <xsl:attribute name="value"><xsl:value-of select="mi"/></xsl:attribute>      </input><br/>      <font>          <xsl:attribute name="color">              <xsl:choose>                  <xsl:when test="//error[.='last_name']">red</xsl:when>                  <xsl:otherwise>black</xsl:otherwise>              </xsl:choose>          </xsl:attribute>      Last Name:      </font>      <input type="text" name="last_name">          <xsl:attribute name="value"><xsl:value-of   select="last_name"/></xsl:attribute>      </input><br/>  </xsl:template>  </xsl:stylesheet>

这个样式表将把内容转成布局。错误检查是很重要的,存储过程通过确定数据是否需要处理来检查数据。对于不能为空但又没有填充数据的每个域返回一个“errors”节点。这个XML的输出大致如下:

    <user>. . .</user><errors><error>first_name</error>. . .</errors>
    <user>. . .</user><errors><error>first_name</error>. . .</errors>
<%@ Language=VBScript %>  <%  Option Explicit  Dim oUser  Set oUser = New CUser  If oUser.validate() Then      Set oUser = Nothing      Server.Transfer "NextPage.asp"  End If  %>  <html>  <body>  <form method="POST" action="GetUser.asp" name="thisForm" id="thisForm">  <%  Response.Write xslTransform(oUser.DOM, "user.xsl")  %>  <input type="hidden" name="txtUserXML" id="txtUserXML"   value="<%=oUser.DOM.xml%>">  <input type="submit" value="Submit">  </form>  </body>  </html>  <%  Set oUser = Nothing  Function xslTransform(vXML, XSLFileName)      Dim m_xml, m_xsl      If VarType(vXML) = 8 Then          Set m_xml = m_dom          m_xml.loadXML vXML      ElseIf VarType(vXML) = 9 Then          Set m_xml = vXML      End If      If m_xml.parseError.errorCode <> 0 Then _          Err.Raise vbObjectError, "XMLTransform(...)", m_xml.parseError.reason      Set m_xsl = Server.CreateObject("MSXML2.DOMDocument")      m_xsl.async = False      m_xsl.load Server.MapPath(XSLFileName)      If m_xsl.parseError.errorCode <> 0 Then _          Err.Raise vbObjectError, "XMLTransform(...)", m_xsl.parseError.reason      xslTransform = m_xml.transformNode(m_xsl)      Set m_xsl = Nothing  End Function  %>  <!--#include file="CUser.asp"-->

ASP代码创建CUser对象,如果有数据就填充数据。然后使用CUser的DOM通过XSL转换来创建结果HTML。转换被包装到一个叫做xslTransform的函数之中。而且,记住要将结果CUser DOM存储到一个隐藏的<INPUT>元素中。或者你可以将CUser DOM存储到一个session变量中并在初始化过程中将其取出。

在完成这个页面之后,你可以基于前面的骨架代码创建其它的页面。现在你已经创建了一个数据收集的拷贝-粘贴方案。这个方案最优美的部分在于所有的输出都是纯HTML,没有任何浏览器特有的性质或者样式表。而且由于功能都被包装到类中,所以你可以使用XSLT产生布局,代码运行相当快。

以上就是使用纯HTML的通用数据管理和服务的内容,更多相关内容请关注PHP中文网(www.php.cn)!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:使用XSLT将XML数据转换成HTML

相关资讯