亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > XML > 正文

使用純HTML的通用數據管理和服務

2024-09-05 20:53:32
字體:
來源:轉載
供稿:網友

使用純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("http://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("http://" & 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("http://" & 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與你的代碼建立了橋梁。

 
當CUser對象初始化之后,它收集Request數據并使用collectData()子函數將收集到的數據放到UserDOM的一個相應的節點中。(代碼我不再解釋,因為它本身相當容易理解。)在收集了數據之后(或者不收集數據),我們將使用XSL將數據內容轉變成布局。

<?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="http://error">
    <font color="red">*Information in red is required<br/></font>
    </xsl:if>
    <xsl:apply-templates select="http://user"/>
</xsl:template>

<xsl:template match="user">
    <font>
        <xsl:attribute name="color">
            <xsl:choose>
                <xsl:when test="http://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="http://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="http://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>
這個樣式表將把內容轉成布局。錯誤檢查是很重要的,存儲過程通過確定數據是否需要處理來檢查數據。對于不能為空但又沒有填充數據的每個域返回一個“errors”節點。這個XML的輸出大致如下:

    <user>. . .</user><errors><error>first_name</error>. . .</errors>

注意如果有一個錯誤匹配了節點名,那么產生的輸出將會是紅色的。我們需要下面的一個ASP將前面的所有東西組合起來。

<%@ 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>元素中?;蛘吣憧梢詫User DOM存儲到一個Session變量中并在初始化過程中將其取出。

在完成這個頁面之后,你可以基于前面的骨架代碼創建其它的頁面?,F在你已經創建了一個數據收集的拷貝-粘貼方案。這個方案最優美的部分在于所有的輸出都是純HTML,沒有任何瀏覽器特有的性質或者樣式表。而且由于功能都被包裝到類中,所以你可以使用XSLT產生布局,代碼運行相當快。


--------------------------------------------------------------------------------
本文作者:Phillip Perkins是Ajilon Consulting的簽約人。他的經驗很豐富,從機器控制和客戶/服務器到企業內部網應用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三区四区在线播放| 欧美黄色小视频| 成人激情综合网| 亚洲在线免费观看| 久久精品成人欧美大片古装| 日韩中文字幕视频| 欧美黑人性视频| 国产成人鲁鲁免费视频a| 亚洲国产欧美一区二区三区同亚洲| 欧美日韩aaaa| 欧美日韩中国免费专区在线看| 中文字幕亚洲无线码a| 永久免费看mv网站入口亚洲| 欧美黑人性视频| 97涩涩爰在线观看亚洲| 亚洲高清久久久久久| 欧美一级成年大片在线观看| 久久精品中文字幕电影| 国产精品久久久久久婷婷天堂| 国产精欧美一区二区三区| 日av在线播放中文不卡| 91色中文字幕| 一区二区三区黄色| 久久精品视频一| 久久久精品视频成人| 欧洲成人在线观看| 国模精品视频一区二区| 午夜精品久久久久久久白皮肤| 亚洲精品福利资源站| 亚洲人成伊人成综合网久久久| 欧美国产日本高清在线| 日韩av网址在线观看| 久久久999精品| 欧美一级电影在线| 亚洲国产高清高潮精品美女| 91在线精品视频| 性欧美xxxx| 国产精品美女在线观看| 国产亚洲成精品久久| 国产九九精品视频| 欧美亚洲另类激情另类| 久久人人爽人人爽人人片av高请| 欧美黑人性生活视频| 久久伊人精品一区二区三区| 国产乱肥老妇国产一区二| 精品久久久国产| 91社影院在线观看| 欧美激情视频一区二区| 日韩亚洲成人av在线| 国产精品天天狠天天看| 深夜精品寂寞黄网站在线观看| 丝袜亚洲欧美日韩综合| 亚洲国产中文字幕久久网| 亚洲人成免费电影| 在线亚洲欧美视频| 久久精品精品电影网| 国产成人免费av| 国产精品国语对白| 久久精品人人做人人爽| 久久久国产精品亚洲一区| 91成人在线视频| 亚洲成年网站在线观看| 97国产精品视频| 色777狠狠综合秋免鲁丝| 久久人人97超碰精品888| 精品久久香蕉国产线看观看gif| 欧美大肥婆大肥bbbbb| 亚洲美女av网站| 2018日韩中文字幕| 日韩欧美在线看| 欧美在线视频免费| 欧美寡妇偷汉性猛交| 欧美美女18p| 久久久久久久一区二区三区| 国产精品jvid在线观看蜜臀| 欧美亚洲视频在线看网址| 国产97在线观看| 国产精品久久久久久超碰| 国产精品27p| 国产欧美亚洲精品| 伊人亚洲福利一区二区三区| 精品国产精品三级精品av网址| 在线视频欧美日韩精品| 亚洲精品自拍视频| 亚洲春色另类小说| 国产精品一区二区三区在线播放| 成人免费高清完整版在线观看| 亚洲精品国产精品久久清纯直播| 欧美午夜片欧美片在线观看| 午夜精品一区二区三区在线播放| 456亚洲影院| 亚洲品质视频自拍网| 欧美中文字幕在线观看| 国产精品日韩av| 久久精品国产欧美激情| 欧美日韩免费看| 成人在线国产精品| 国产精品日韩电影| 欧美另类xxx| 国产精品偷伦免费视频观看的| 亚洲天堂一区二区三区| 国产综合久久久久| 91精品国产自产在线| 欧美激情欧美狂野欧美精品| 国产一区二区日韩| 日韩av最新在线| 欧美剧在线观看| 91精品久久久久久久| 国产日本欧美一区二区三区| 国产亚洲精品一区二区| 成人激情综合网| 这里只有精品视频在线| 亚洲欧美一区二区三区久久| 久久精品国产综合| 国产精品香蕉av| 日本久久亚洲电影| 国模精品系列视频| 国产欧美日韩丝袜精品一区| 国产精品久久久久久av下载红粉| 欧美性猛交xxxx乱大交3| 色婷婷av一区二区三区在线观看| 日韩av在线免费观看一区| 浅井舞香一区二区| 久久久成人精品| 精品电影在线观看| 国产精品18久久久久久麻辣| 国产日韩综合一区二区性色av| 欧美性生交xxxxx久久久| 91po在线观看91精品国产性色| 欧美性猛交xxxx久久久| 亚洲天堂av网| 国产精品v日韩精品| 色狠狠久久aa北条麻妃| 国产欧美一区二区三区视频| 亚洲人成电影网站色xx| 亚洲精品v天堂中文字幕| 国产主播精品在线| 久久69精品久久久久久久电影好| 欧美日韩美女在线观看| 日韩欧美中文免费| 日韩av中文字幕在线免费观看| 国产精品色婷婷视频| 国产精品色午夜在线观看| 美女啪啪无遮挡免费久久网站| 欧美电影在线观看高清| 91社影院在线观看| 国产伊人精品在线| 亚洲美女精品成人在线视频| 亚洲欧美三级伦理| 久热99视频在线观看| 久久噜噜噜精品国产亚洲综合| 另类天堂视频在线观看| 日韩在线观看免费全| 中文字幕最新精品| 欧美与欧洲交xxxx免费观看| 国产午夜精品美女视频明星a级| 日本精品久久电影| 亚洲精品国产精品自产a区红杏吧| 色婷婷久久av| 久久亚洲国产成人| 亚洲91精品在线观看| 国产91av在线| 庆余年2免费日韩剧观看大牛| 日韩av中文字幕在线|