Esta clase asp se puede utilizar para manejar el envío y la recepción de paquetes xml. Se puede utilizar para la comunicación entre interfaces API entre varios sistemas heterogéneos y para procesar la invocación y recepción de servicios web.
propiedad:
Cadena
para enviar xml
Mensaje
de solo escritura
: mensaje de error del sistema
Cadena
de solo lectura
: obtiene el valor del nodo en el paquete XML enviado
Cadena
Parámetros de solo lectura: Str: nombre de nodo
GetXmlData: obtiene el objeto de datos XML devuelto
XMLDom
solo lectura
Método:
LoadXmlFromFile: complete el parámetro del objeto XmlDoc Ruta: ruta xml desde un archivo xml externo
Void
LoadXmlFromString: complete el parámetro del objeto XmlDoc Str:cadena xml con una cadena
Vacío
NodeValue establece los parámetros del nodo
Parámetro
NodeName Nombre de nodo
NodeText Valor
NodeType Tipo de guardado [text=0,cdata=1]
blnEncode Si se codifica [verdadero, falso]
Vacío
SendHttpData: enviar paquete xml
PrintSendXmlData: imprimir datos XML de solicitud de envío
PrintGetXmlData: imprimir datos XML de devolución
SaveSendXmlDataToFile: guardar datos xml de solicitud de envío en un archivo, el nombre del archivo es sendxml_date.txt
SaveGetXmlDataToFile: guarda los datos XML devueltos en un archivo, el nombre del archivo es getxml_date.txt
GetSingleNode: obtiene el parámetro de información del nodo Nodestring del xml devuelto: nombre del nodo
AcceptHttpData: recibe el paquete XML, la información de error se obtiene a través del objeto Mensaje
AcceptSingleNode: regresa la información del nodo del paquete XML recibido Parámetro Nodestring: nombre del nodo
PrintAcceptXmlData: imprime los datos XML recibidos por el extremo receptor
SaveAcceptXmlDataToFile: guarda los datos del paquete XML recibido en un archivo, el nombre del archivo es Acceptxml_date.txt
SaveDebugStringToFile: guarda los datos de depuración en un archivo llamado debugnote_date.txt
Parámetro Debugstr: información de depuración
Código:
xmlcls.asp
<%
Rem maneja el envío y la recepción de clases de datos xml
'------------------------------------------------ -
'Conserve la información de derechos de autor al reimprimir
'Autor: walkman
'Empresa: Bubuweiying Technology Co., Ltd.
'Sitio web: http://www.shouji138.com
'Versión: ver1.0
'------------------------------------------------ -
Definición de variable
Class XmlClass
Rem
XmlDoc privado, XmlHttp
Código de mensaje privado, SysKey, XMLPath
Privado m_GetXmlDoc,m_url
privada de m_XmlDocAccept
Rem
Subclase privada_Initialize()
En caso de error Continuar siguiente
Código de mensaje = ""
RutaXml = ""
Establecer XmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0")
XmlDoc.ASYNC = Falso
End Sub
Rem destruye el objeto.
Subclase privada_Terminate()
Si IsObject (XmlDoc) entonces establezca XmlDoc = Nada
Si IsObject(m_XmlDocAccept) entonces establezca m_XmlDocAccept = Nada
Si IsObject(m_GetXmlDoc) entonces establezca m_GetXmlDoc = Nada
Subtítulo final
'Se inicia la definición de atributo público--------------------------
mensaje de error remoto
Mensaje de obtención de propiedad pública()
Mensaje = Código de mensaje
Propiedad final
Rem la dirección a la que enviar xml
Propiedad pública Let URL(str)
m_url = cadena
Propiedad final
'Fin de la definición de atributo público--------------------------
'Inicio de método y proceso privado--------------------------
REM cargar xml
Subcarga privadaXmlData()
Si XmlPath <> "" Entonces
Si no es XmlDoc.Load (XmlPath) entonces
XmlDoc.LoadXml "<?xml versión=""1.0"" codificación=""gb2312""?><raíz/>"
Terminar si
Demás
XmlDoc.LoadXml "<?xml versión=""1.0"" codificación=""gb2312""?><raíz/>"
Terminar si
Finalizar
la conversión de caracteres Sub Rem
Función privada AnsiToUnicode (ByVal str)
Dim i, j, c, i1, i2, u, fs, f, p
AnsiToUnicode = ""
pag = ""
Para i = 1 a Len(str)
c = Medio(cadena, i, 1)
j = AscW(c)
Si j < 0 Entonces
j = j + 65536
Terminar si
Si j >= 0 y j <= 128 Entonces
Si p = "c" Entonces
AnsiToUnicode = " " & AnsiToUnicode
pag = "e"
Terminar si
AnsiToUnicode = AnsiToUnicode &c
Demás
Si p = "e" Entonces
AnsiToUnicode = AnsiToUnicode & " "
pag = "c"
Terminar si
AnsiToUnicode = AnsiToUnicode & ("&#" & j & ";")
Terminar si
Próximo
Conversión de caracteres Rem
de función final
Función privada strAnsi2Unicode (asContents)
Dim len1,i,varchar,varasc
strAnsi2Unicode = ""
len1=LenB(comoContenido)
Si len1 = 0, entonces salga de la función
Para i=1 a len1
varchar=MidB(comoContenido,i,1)
varasc=AscB(varchar)
Si varasc > 127 Entonces
Si MidB(asContents,i+1,1)<>"" Entonces
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
Terminar si
yo=yo+1
Demás
strAnsi2Unicode = strAnsi2Unicode y Chr(varasc)
Terminar si
Próximo
Función final
Rem agrega caracteres al archivo
Sub privado WriteStringToFile (nombre de archivo, cadena)
En caso de error Continuar siguiente
fs,ts tenues
Establecer fs= createobject("script_ing.filesystemobject")
Si no es IsObject(fs), entonces salga de Sub
Establecer ts=fs.OpenTextFile(Server.MapPath(nombre de archivo),8,True)
ts.writeline(cadena)
ts.cerrar
Establecer ts=Nada
Establecer fs=Nada
Subtítulo final
'Fin del método y proceso privado--------------------------
'Se inicia el método público--------------------------
''''''''''' Envía la parte xml para comenzar
Rem rellena el objeto XmlDoc desde un archivo xml externo
Public Sub LoadXmlFromFile (ruta)
XmlPath = Servidor.MapPath(ruta)
CargarXmlData()
End Sub
Rem llena el objeto XmlDoc con una cadena
Subcarga públicaXmlFromString(str)
XmlDoc.LoadXml cadena
End Sub
Rem Establece parámetros de nodo como NodeValue "appID",AppID,1,False
'------------------------------------------------ -
'parámetro:
'NodeName nombre de nodo
'Valor de texto de nodo
'Tipo de guardado NodeType [texto=0,cdata=1]
'blnEncode si se codifica [verdadero, falso]
'------------------------------------------------ -
Valor de subnodo público (nombre de nodo de Byval, texto de nodo de Byval, tipo de nodo de Byval, código bln de Byval)
Dim ChildNode, Crear sección CDATA
Nombre de nodo = Lcase(Nombre de nodo)
Si XmlDoc.documentElement.selectSingleNode(NodeName) no es nada, entonces
Establecer ChildNode = XmlDoc.documentElement.appendChild(XmlDoc.createNode(1,NodeName,""))
Demás
Establecer ChildNode = XmlDoc.documentElement.selectSingleNode(NombreNodo)
Terminar si
Si blnEncode = Verdadero Entonces
NodoTexto = AnsiToUnicode(NodoTexto)
Terminar si
Si tipo de nodo = 1 entonces
ChildNode.Text = ""
Establecer CreateCDATASection = XmlDoc.createCDATASection(Replace(NodeText,"]]>","]]>"))
ChildNode.appendChild(crearCDATASection)
Demás
ChildNode.Text = Texto de nodo
Terminar si
Subtítulo final
'------------------------------------------------ -
'Obtener el valor del nodo en el paquete XML enviado
'parámetro:
'Nombre del nodo str
'------------------------------------------------ -
Propiedad pública GetXmlNode(ByvalStr)
Si XmlDoc.documentElement.selectSingleNode(Str) no es nada, entonces
XmlNode = "Nulo"
Demás
XmlNode = XmlDoc.documentElement.selectSingleNode(Str).text
Terminar si
Propiedad final
'----------------------------------------------- -- ---
'Obtener el objeto de datos XML devuelto
'ejemplo:
'Cuando GetXmlData no es NULL, GetXmlData es un objeto XML
'------------------------------------------------ -
Propiedad pública Obtener GetXmlData()
Establecer GetXmlData = m_GetXmlDoc
Propiedad final
'------------------------------------------------ -
'Enviar paquete xml a http://www.devdao.com/
'------------------------------------------------ -
Sub público SendHttpData()
Atenuar i,GetXmlDoc,LoadAppid
Establecer Xmlhttp = Server.CreateObject ("MSXML2.ServerXMLHTTP.3.0")
Establecer GetXmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0") ' Devolver paquete xml
XmlHttp.Abrir "POST", m_url, falso
XmlHttp.SetRequestHeader "tipo de contenido", "texto/xml"
XmlHttp.Enviar XmlDoc
'Respuesta.Escribir strAnsi2Unicode(xmlhttp.responseBody)
Si GetXmlDoc.load (XmlHttp.responseXML) Entonces
Establecer m_GetXmlDoc = GetXmlDoc
Demás
MessageCode = "¡Error al solicitar datos!"
Salir Sub
Terminar si
Establecer GetXmlDoc = Nada
Establecer XmlHttp = Nada
Subtítulo final
'------------------------------------------------ -
'Imprimir datos XML de solicitud de envío
'------------------------------------------------ -
Sub público PrintSendXmlData()
Respuesta.Borrar
Respuesta.ContentType = "texto/xml"
Respuesta.CharSet = "gb2312"
Respuesta.Expira = 0
Respuesta.Escribir "<?xml version=""1.0"" codificación=""gb2312""?>"&vbNewLine
Respuesta.Escribir XmlDoc.documentElement.XML
Fin Sub
'----------------------------------------------- -- ---
'Imprimir datos XML devueltos
'------------------------------------------------ -
Subimpresión públicaGetXmlData()
Respuesta.Borrar
Respuesta.ContentType = "texto/xml"
Respuesta.CharSet = "gb2312"
Respuesta.Expira = 0
Si IsObject (m_GetXmlDoc) entonces
Respuesta.Escribir "<?xml version=""1.0"" codificación=""gb2312""?>"&vbNewLine
Respuesta.Escribir m_GetXmlDoc.documentElement.XML
Demás
Respuesta.Escribir "<?xml version=""1.0"" codificación=""gb2312""?><root></root>"
Terminar si
Subtítulo final
Rem guarda los datos xml de la solicitud de envío en un archivo llamado sendxml_date.txt
Sub público SaveSendXmlDataToFile()
nombre de archivo tenue, str
nombre de archivo = "sendxml_" & DateValue(ahora) & ".txt"
cadena = ""
cadena = cadena & ""& Ahora() & vbNewLine
cadena = cadena & "----------------------------------------------------- --- "& vbNuevaLínea
str = str & "<?xml versión=""1.0"" codificación=""gb2312""?>" & vbNewLine
cadena = cadena & XmlDoc.documentElement.XML & vbNewLine
cadena = cadena & "----------------------------------------------------- --- "& vbNuevaLínea
cadena = cadena & vbNuevaLínea & vbNuevaLínea & vbNuevaLínea
WriteStringToFile nombre de archivo, str
Subtítulo final
Rem guarda los datos XML devueltos en un archivo llamado getxml_date.txt
Sub público SaveGetXmlDataToFile()
nombre de archivo tenue, str
nombre de archivo = "getxml_" & DateValue(ahora) & ".txt"
cadena = ""
cadena = cadena & ""& Ahora() & vbNewLine
cadena = cadena & "----------------------------------------------------- --- "& vbNuevaLínea
Si IsObject (m_GetXmlDoc) entonces
str = str & "<?xml versión=""1.0"" codificación=""gb2312""?>" & vbNewLine
cadena = cadena & m_GetXmlDoc.documentElement.XML
Demás
str = str & "<?xml version=""1.0"" codificación=""gb2312""?>" & vbNewLine & "<root>" & vbNewLine & "</root>"
Terminar si
cadena = cadena y vbNuevaLínea
cadena = cadena & "----------------------------------------------------- --- "& vbNuevaLínea
cadena = cadena & vbNuevaLínea & vbNuevaLínea & vbNuevaLínea
WriteStringToFile nombre de archivo, str
Subtítulo final
'------------------------------------------------ -
'Obtiene la información del nodo del xml devuelto
'XmlClassObj.GetSingleNode("//msg")
'------------------------------------------------ -
Función pública GetSingleNode (cadena de nodos)
Si IsObject (m_GetXmlDoc) entonces
GetSingleNode = m_GetXmlDoc.documentElement.selectSingleNode(nodestring).text
Demás
GetSingleNode = ""
Terminar si
Función final
''''''''''''''''''Fin del envío de la parte xml
''''''''''''''''''La parte xml de recepción comienza
'------------------------------------------------ -
'Recibimos paquete XML, la información del error se obtiene a través del objeto Mensaje
'------------------------------------------------ -
Función pública AcceptHttpData()
XMLdom tenue
Establecer XMLdom = Server.CreateObject ("Microsoft.XMLDOM")
XMLdom.Async = Falso
XMLdom.Cargar (Solicitud)
Si XMLdom.parseError.errorCode <> 0 Entonces
MessageCode = "No se pueden recibir datos correctamente" & "Descript_ion: " & XMLdom.parseError.reason & "<br>Line: " & XMLdom.parseError.Line
Establecer m_XmlDocAccept = Nulo
Demás
Establecer m_XmlDocAccept = XMLdom
Terminar si
Función final
'----------------------------------------------- -- ---
'Volver para recibir información del nodo del paquete XML
'XmlClassObj.GetSingleNode("//msg")
'------------------------------------------------ -
Función pública AcceptSingleNode (cadena de nodos)
Si IsObject (m_XmlDocAccept) Entonces
AcceptSingleNode = m_XmlDocAccept.documentElement.selectSingleNode(nodestring).text
Demás
AceptarNodoÚnico = ""
Terminar si
Función final
'------------------------------------------------ -
'Imprime los datos XML recibidos por el extremo receptor
'------------------------------------------------ -
Sub público PrintAcceptXmlData()
Respuesta.Borrar
Respuesta.ContentType = "texto/xml"
Respuesta.CharSet = "gb2312"
Respuesta.Expira = 0
Si IsObject (m_XmlDocAccept) Entonces
Respuesta.Escribir "<?xml version=""1.0"" codificación=""gb2312""?>"&vbNewLine
Respuesta.Escribir m_XmlDocAccept.documentElement.XML
Demás
Respuesta.Escribir "<?xml version=""1.0"" codificación=""gb2312""?><root></root>"
Terminar si
Subtítulo final
Rem guarda los datos del paquete XML recibido en un archivo llamado aceptarxml_date.txt
Sub público SaveAcceptXmlDataToFile()
nombre de archivo tenue, str
nombre de archivo = "acceptxml_" & DateValue(ahora) & ".txt"
cadena = ""
cadena = cadena & ""& Ahora() & vbNewLine
cadena = cadena & "----------------------------------------------------- --- "& vbNuevaLínea
Si IsObject (m_XmlDocAccept) Entonces
str = str & "<?xml versión=""1.0"" codificación=""gb2312""?>" & vbNewLine
cadena = cadena & m_XmlDocAccept.documentElement.XML
Demás
str = str & "<?xml version=""1.0"" codificación=""gb2312""?>" & vbNewLine & "<root>" & vbNewLine & "</root>"
Terminar si
cadena = cadena y vbNuevaLínea
cadena = cadena & "----------------------------------------------------- --- "& vbNuevaLínea
cadena = cadena & vbNuevaLínea & vbNuevaLínea & vbNuevaLínea
WriteStringToFile nombre de archivo, str
End Sub
''''''''''''''''''Reciba la parte xml y finalice
Rem Guarde los datos de depuración en un archivo llamado debugnote_date.txt
Sub público SaveDebugStringToFile (debugstr)
nombre de archivo tenue, str
nombre de archivo = "debugnote_" & DateValue(ahora) & ".txt"
cadena = ""
cadena = cadena & ""& Ahora() & vbNewLine
cadena = cadena & "----------------------------------------------------- --- "& vbNuevaLínea
str = str & debugstr & vbNewLine
cadena = cadena & "----------------------------------------------------- --- "
cadena = cadena & vbNuevaLínea & vbNuevaLínea & vbNuevaLínea
WriteStringToFile nombre de archivo, str
End Sub
'Fin del método público--------------------------
Fin de clase
%>
Caso de prueba:
sendxml.asp
<%
Opción Respuesta explícita.buffer
= Verdadero
Respuesta.Expira=-1
%>
<!--#include file="xmlcls.asp"-->
<%
Const Apisysno = "23498927347234234987"
Const ActionURL = " http://www.shouji138.com/aspnet2/acceptxml.asp " Rem responde al archivo escribiendo la dirección URL
DimXmlClassObj
Establecer XmlClassObj = new XmlClass 'Crear objeto
XmlClassObj.LoadXmlFromString("<?xml version=""1.0"" encoding=""gb2312""?><root/>") 'Rellene el objeto XMLDOC con caracteres xml y utilícelo para enviar xml
XmlClassObj.URL = ActionURL 'Establece la URL de respuesta
formato xml remoto
Rem "<?xml versión="1.0" codificación="gb2312"?>
Rem <raíz>
Rem <sysno></sysno>
Rem <nombre de usuario></nombre de usuario>
Rem <contraseña></contraseña>
Rem <correo electrónico></correo electrónico>
Rem <nombre de página></nombre de página>
Rem <pageurl></pageurl>
rem</root>
XmlClassObj.NodeValue "sysno",Apisysno,0,False
XmlClassObj.NodeValue "nombre de usuario", "nombre de usuario de prueba", 0, falso
XmlClassObj.NodeValue "contraseña", "contraseña",0,False
XmlClassObj.NodeValue "correo electrónico", " [email protected]",0,False
XmlClassObj.NodeValue "nombre de página", "sitio", 0, falso
XmlClassObj.NodeValue "pageurl"," http://www.shouji138.com",1,False
)
'Guarda el paquete de base de datos xml enviado en un
archivo txt .PrintGetXmlData() 'Imprime los datos xml recibidos
'response.write XmlClassObj.Message 'Imprimir mensaje de error
XmlClassObj.SaveGetXmlDataToFile() 'Guarda la base de datos xml recibida en un archivo txt
Response.write XmlClassObj.GetSingleNode("//message") 'Muestra el valor del nodo msg de los datos xml recibidos
Establecer XmlClassObj = Nada 'Destruir instancia de objeto
%>
aceptarxml.asp
<%
Interfaz de registro de usuario de Rem Api
%>
<%
Respuesta.Expira= -1
Response.Addheader "pragma", "no-cache"
Response.AddHeader "control de caché", "sin almacenamiento"
%>
<!--#Incluir archivo="xmlcls.asp"-->
<%
formato xml remoto
Rem "<?xml versión="1.0" codificación="gb2312"?>
Rem <raíz>
Rem <sysno></sysno>
Rem <nombre de usuario></nombre de usuario>
Rem <contraseña></contraseña>
Rem <correo electrónico></correo electrónico>
Rem <nombre de página></nombre de página>
Rem <pageurl></pageurl>
rem</root>
Const Apisysno = "23498927347234234987"
En caso de error Continuar siguiente
DimXmlClassObj
Establecer XmlClassObj = new XmlClass 'Crear objeto
XmlClassObj.AcceptHttpData() 'Recibir datos xml
XmlClassObj.SaveAcceptXmlDataToFile() 'Guarda los datos xml recibidos en un archivo txt
Err.borrar
mensaje tenue
Dim sysno, nombre de usuario, contraseña, correo electrónico, nombre de página, URL de página
sysno = XmlClassObj.AcceptSingleNode("//sysno")
nombre de usuario = XmlClassObj.AcceptSingleNode("//nombre de usuario")
contraseña = XmlClassObj.AcceptSingleNode("//contraseña")
correo electrónico = XmlClassObj.AcceptSingleNode("//correo electrónico")
Nombre de página = XmlClassObj.AcceptSingleNode("//nombre de página")
PageURL = XmlClassObj.AcceptSingleNode("//pageurl")
XmlClassObj.SaveDebugStringToFile("sysno=" & sysno) 'Guardar en el archivo de registro de depuración
Si se equivoca entonces
mensaje = mensaje & Err.Descript_ion
Demás
Err.borrar
Si sysno <> Apisysno Entonces
mensaje = "¡No lo utilices ilegalmente!"
Demás
mensaje = regUser(nombre de usuario,contraseña,correo electrónico,nombre de página,URL de página)
Terminar si
Terminar si
'XmlClassObj.SaveDebugStringToFile("message=" & message) 'Guarda el valor del mensaje en el archivo de registro de depuración
Set XmlClassObj = Nothing 'Destruye la instancia del objeto
Response.ContentType = "text/xml" 'Envía el flujo de datos xml al remitente
Respuesta.Charset = "gb2312"
Respuesta.Borrar
Respuesta.Escribir "<?xml version=""1.0"" codificación=""gb2312""?>" & vbnewline
Respuesta.Escribir "<raíz>" y vbnewline
Respuesta.Escribir "<message>" & mensaje & "</message>" & vbnewline
Respuesta.Escribir "<nowtime>" & Now() & "</nowtime>" & vbnewline
Respuesta.Escribir "</root>" y vbnewline
Función regUser(nombre de usuario, contraseña, correo electrónico, nombre de página, URL de página)
'''''''''''''''''
''''''''''''''''
''''''''''''''''
'Operar base de datos de usuarios registrados
''''''''''''''''
''''''''''''''
regUser = "OK"
Función final
%>
Dirección de descarga:/u/info_img/2009-06/25/Xmlcls.rarDirección
de demostración:http://www.shouji138.com/aspnet2/sendxml.asp