>백엔드 개발 >XML/RSS 튜토리얼 >순수 HTML을 사용한 범용 데이터 관리 및 제공

순수 HTML을 사용한 범용 데이터 관리 및 제공

黄舟
黄舟원래의
2017-03-03 17:03:061754검색

순수한 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 개체가 초기화되면 요청 데이터를 수집하고 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을 숨겨진 1f8d794be57c83e2004988471599675b 요소에 저장해야 합니다. 또는 CUser DOM을 세션 변수에 저장하고 초기화 중에 꺼낼 수 있습니다.

이 페이지를 완료한 후 이전 스켈레톤 코드를 기반으로 다른 페이지를 만들 수 있습니다. 이제 데이터 수집을 위한 복사 및 붙여넣기 시나리오가 생성되었습니다. 이 솔루션의 가장 아름다운 부분은 모든 출력이 브라우저별 속성이나 스타일시트 없이 순수한 HTML이라는 점입니다. 기능이 클래스로 래핑되므로 XSLT를 사용하여 레이아웃을 생성할 수 있고 코드가 매우 빠르게 실행됩니다.

위 내용은 순수 HTML을 이용한 일반적인 데이터 관리 및 서비스 내용입니다. 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.