純粋な HTML を使用したユニバーサルなデータ管理と提供

黄舟
リリース: 2017-03-03 17:03:06
オリジナル
1669 人が閲覧しました

純粋な HTML を使用したユニバーサルなデータ管理とサービス。ただし、データを収集するにはデータ リポジトリが必要です。データベース サーバーの使用に伴う多くの問題を回避するために、このデータを XML で収集できます。私たちのプロジェクトの基本構造は次のとおりです:

<user>
    <first_name/>
    <last_name/>
    <mi/>
</user>
ログイン後にコピー

最初はデータを名、姓、ミドルネームに限定しました。このページの基本的な考え方は、ユーザー情報がこのページで取得されるということです。ユーザー情報のニーズが満たされた後、プロセスは次の論理収集ステップに移動する必要があります。物事をシンプルにするために、ユーザー機能を 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(.)=&#39;" &
oCollection(sKey)(n) & "&#39;]")
                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)
    &#39;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 に基づいて構築されています。このコンポーネントは、MSDN にある Fitch および Mather DAL コンポーネントに基づいて構築されています。このようにして、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="//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[.=&#39;first name&#39;]">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[.=&#39;mi&#39;]">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[.=&#39;last_name&#39;]">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>
ログイン後にコピー

このスタイルシートはコンテンツをレイアウトに変換します。エラー チェックは重要であり、ストアド プロシージャは、処理が必要かどうかを判断してデータをチェックします。空にすることはできないが、データが入力されていないフィールドごとに「エラー」ノードを返します。この XML の出力はおおよそ次のとおりです:

    <user>. . .</user><errors><error>first_name</error>. . .</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 オブジェクトを作成し、データがある場合はデータを埋めます。結果として得られる HTML は、CUser の DOM を使用した XSL 変換によって作成されます。変換は xslTransform という関数にラップされます。また、結果の CUser DOM を非表示の 要素に保存することを忘れないでください。または、CUser DOM をセッション変数に保存し、初期化中にそれを取り出すこともできます。

このページを完了したら、前のスケルトン コードに基づいて他のページを作成できます。これで、データ収集用のコピーアンドペーストのシナリオが作成されました。このソリューションの最も美しい点は、すべての出力がブラウザ固有のプロパティやスタイルシートを含まない純粋な HTML であることです。また、機能がクラスにラップされているため、XSLT を使用してレイアウトを生成でき、コードは非常に高速に実行されます。

上記は純粋な HTML を使用した一般的なデータ管理とサービスの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!