首页 > 语言 > 关键词  > asp最新资讯  > 正文

asp处理xml数据的发送、接收类

2008-09-08 16:36 · 稿源:

本asp类可以用来处理xml包的发送与接收。可用于各种异构系统之间API接口间通讯,以及处理Web Service的调用与接收。

属性:

URL : 发送xml的接收地址

String
只写

Message : 系统错误信息
String
只读

XmlNode:获取发送包XML中节点的值
String
只读
参数:Str:节点名称

GetXmlData: 获取返回XML数据对象
XMLDom
只读

方法:

LoadXmlFromFile : 从外部xml文件填充XmlDoc对象
参数 Path:xml路径
Void

LoadXmlFromString : 用字符串填充XmlDoc对象
参数 Str:xml字符串
Void


NodeValue 设置node的参数

参数

NodeName 节点名

NodeText 值

NodeType 保存类型 [text=0,cdata=1]

blnEncode 是否编码 [true,false]
Void


SendHttpData : 发送xml包

PrintSendXmlData : 打印发送请求XML数据

PrintGetXmlData : 打印返回XML数据

SaveSendXmlDataToFile : 保存发送请求xml数据到文件,文件名为sendxml_日期.txt

SaveGetXmlDataToFile : 保存返回XML数据到文件,文件名为getxml_日期.txt

GetSingleNode : 获取返回xml的节点信息
参数 Nodestring:节点名

AcceptHttpData : 接收XML包,错误信息通过Message对象获取

AcceptSingleNode: 返回接收XML包节点信息
参数 Nodestring:节点名

PrintAcceptXmlData : 打印接收端接收到的XML数据

SaveAcceptXmlDataToFile : 保存接收的XML包数据到文件,文件名为acceptxml_日期.txt


SaveDebugStringToFile : 保存调试数据到文件,文件名为debugnote_日期.txt
参数 Debugstr:调试信息

代码:

xmlcls.asp


<%


Rem 处理xml数据的发送、接收类
'--------------------------------------------------
'转载的时候请保留版权信息
'作者:walkman
'网址:手机主题网:https://www.shouji138.com
'版本:ver1.0
'--------------------------------------------------

Class XmlClass

Rem 变量定义
Private XmlDoc,XmlHttp
Private MessageCode,SysKey,XmlPath
Private m_GetXmlDoc,m_url
Private m_XmlDocAccept

Rem 初始化
Private Sub Class_Initialize()
On Error Resume Next
MessageCode = ""
XmlPath = ""
Set XmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0")
XmlDoc.ASYNC = False
End Sub

Rem 销毁对象
Private Sub Class_Terminate()
If IsObject(XmlDoc) Then Set XmlDoc = Nothing
If IsObject(m_XmlDocAccept) Then Set m_XmlDocAccept = Nothing
If IsObject(m_GetXmlDoc) Then Set m_GetXmlDoc = Nothing
End Sub



'公共属性定义开始--------------------------
Rem 错误信息
Public Property Get Message()
Message = MessageCode
End Property


Rem 发送xml的地址
Public Property Let URL(str)
m_url = str
End Property
'公共属性定义结束--------------------------

'私有过程、方法开始--------------------------
Rem 加载xml
Private Sub LoadXmlData()
If XmlPath <> "" Then
If Not XmlDoc.Load(XmlPath) Then
XmlDoc.LoadXml "<?xml version=""1.0"" encoding=""gb2312""?><root/>"
End If
Else
XmlDoc.LoadXml "<?xml version=""1.0"" encoding=""gb2312""?><root/>"
End If
End Sub

Rem 字符转化
Private Function AnsiToUnicode(ByVal str)
Dim i, j, c, i1, i2, u, fs, f, p
AnsiToUnicode = ""
p = ""
For i = 1 To Len(str)
c = Mid(str, i, 1)
j = AscW(c)
If j < 0 Then
j = j + 65536
End If
If j >= 0 And j <= 128 Then
If p = "c" Then
AnsiToUnicode = " " & AnsiToUnicode
p = "e"
End If
AnsiToUnicode = AnsiToUnicode & c
Else
If p = "e" Then
AnsiToUnicode = AnsiToUnicode & " "
p = "c"
End If
AnsiToUnicode = AnsiToUnicode & ("&#" & j & ";")
End If
Next
End Function

Rem 字符转化
Private Function strAnsi2Unicode(asContents)
Dim len1,i,varchar,varasc
strAnsi2Unicode = ""
len1=LenB(asContents)
If len1=0 Then Exit Function
For i=1 to len1
varchar=MidB(asContents,i,1)
varasc=AscB(varchar)
If varasc > 127 Then
If MidB(asContents,i+1,1)<>"" Then
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
End If
i=i+1
Else
strAnsi2Unicode = strAnsi2Unicode & Chr(varasc)
End If
Next
End Function


Rem 往文件中追加字符
Private Sub WriteStringToFile(filename,str)
On Error Resume Next
Dim fs,ts
Set fs= createobject("scripting.filesystemobject")
If Not IsObject(fs) Then Exit Sub
Set ts=fs.OpenTextFile(Server.MapPath(filename),8,True)
ts.writeline(str)
ts.close
Set ts=Nothing
Set fs=Nothing
End Sub
'私有过程、方法结束--------------------------

'公共方法开始--------------------------


'''''''''''发送xml部分开始
Rem 从外部xml文件填充XmlDoc对象
Public Sub LoadXmlFromFile(path)
XmlPath = Server.MapPath(path)
LoadXmlData()
End Sub

Rem 用字符串填充XmlDoc对象
Public Sub LoadXmlFromString(str)
XmlDoc.LoadXml str
End Sub

Rem 设置node的参数 如 NodeValue "appID",AppID,1,False
'--------------------------------------------------
'参数 :
'NodeName 节点名
'NodeText 值
'NodeType 保存类型 [text=0,cdata=1]
'blnEncode 是否编码 [true,false]
'--------------------------------------------------
Public Sub NodeValue(Byval NodeName,Byval NodeText,Byval NodeType ,Byval blnEncode)
Dim ChildNode,CreateCDATASection
NodeName = Lcase(NodeName)
If XmlDoc.documentElement.selectSingleNode(NodeName) is nothing Then
Set ChildNode = XmlDoc.documentElement.appendChild(XmlDoc.createNode(1,NodeName,""))
Else
Set ChildNode = XmlDoc.documentElement.selectSingleNode(NodeName)
End If
If blnEncode = True Then
NodeText = AnsiToUnicode(NodeText)
End If
If NodeType = 1 Then
ChildNode.Text = ""
Set CreateCDATASection = XmlDoc.createCDATASection(Replace(NodeText,"]]>","]]&gt;"))
ChildNode.appendChild(createCDATASection)
Else
ChildNode.Text = NodeText
End If
End Sub


'--------------------------------------------------
'获取发送包XML中节点的值
'参数 :
'Str 节点名
'--------------------------------------------------
Public Property Get XmlNode(Byval Str)
If XmlDoc.documentElement.selectSingleNode(Str) is Nothing Then
XmlNode = "Null"
Else
XmlNode = XmlDoc.documentElement.selectSingleNode(Str).text
End If
End Property

'--------------------------------------------------
'获取返回XML数据对象
'例:
'当GetXmlData不为NULL时,GetXmlData为XML对象
'--------------------------------------------------
Public Property Get GetXmlData()
Set GetXmlData = m_GetXmlDoc
End Property


'--------------------------------------------------
'发送xml包
'--------------------------------------------------
Public Sub SendHttpData()
Dim i,GetXmlDoc,LoadAppid
Set Xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
Set GetXmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0") ' 返回xml包
XmlHttp.Open "POST", m_url, false
XmlHttp.SetRequestHeader "content-type", "text/xml"
XmlHttp.Send XmlDoc
'Response.Write strAnsi2Unicode(xmlhttp.responseBody)
If GetXmlDoc.load(XmlHttp.responseXML) Then
Set m_GetXmlDoc = GetXmlDoc
Else
MessageCode = "请求数据错误!"
Exit Sub
End If
Set GetXmlDoc = Nothing
Set XmlHttp = Nothing
End Sub

'--------------------------------------------------
'打印发送请求XML数据
'--------------------------------------------------
Public Sub PrintSendXmlData()
Response.Clear
Response.ContentType = "text/xml"
Response.CharSet = "gb2312"
Response.Expires = 0
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?>"&vbNewLine
Response.Write XmlDoc.documentElement.XML
End Sub

'--------------------------------------------------
'打印返回XML数据
'--------------------------------------------------
Public Sub PrintGetXmlData()

Response.Clear
Response.ContentType = "text/xml"
Response.CharSet = "gb2312"
Response.Expires = 0
If IsObject(m_GetXmlDoc) Then
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?>"&vbNewLine
Response.Write m_GetXmlDoc.documentElement.XML
Else
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?><root></root>"
End If
End Sub


Rem 保存发送请求xml数据到文件,文件名为sendxml_日期.txt
Public Sub SaveSendXmlDataToFile()
Dim filename,str
filename = "sendxml_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine
str = str & XmlDoc.documentElement.XML & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile filename,str
End Sub


Rem 保存返回XML数据到文件,文件名为getxml_日期.txt
Public Sub SaveGetXmlDataToFile()
Dim filename,str
filename = "getxml_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
If IsObject(m_GetXmlDoc) Then
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine
str = str & m_GetXmlDoc.documentElement.XML
Else
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine & "<root>" & vbNewLine & "</root>"
End If
str = str & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile filename,str
End Sub



'--------------------------------------------------
'获取返回xml的节点信息
'XmlClassObj.GetSingleNode("//msg")
'--------------------------------------------------
Public Function GetSingleNode(nodestring)
If IsObject(m_GetXmlDoc) Then
GetSingleNode = m_GetXmlDoc.documentElement.selectSingleNode(nodestring).text
Else
GetSingleNode = ""
End If
End Function
''''''''''''''''''发送xml部分结束


''''''''''''''''''接收xml部分开始
'--------------------------------------------------
'接收XML包,错误信息通过Message对象获取
'--------------------------------------------------
Public Function AcceptHttpData()
Dim XMLdom
Set XMLdom = Server.CreateObject("Microsoft.XMLDOM")
XMLdom.Async = False
XMLdom.Load(Request)
If XMLdom.parseError.errorCode <> 0 Then
MessageCode = "不能正确接收数据" & "Description: " & XMLdom.parseError.reason & "<br>Line: " & XMLdom.parseError.Line
Set m_XmlDocAccept = Null
Else
Set m_XmlDocAccept = XMLdom
End If
End Function

'--------------------------------------------------
'返回接收XML包节点信息
'XmlClassObj.GetSingleNode("//msg")
'--------------------------------------------------
Public Function AcceptSingleNode(nodestring)
If IsObject(m_XmlDocAccept) Then
AcceptSingleNode = m_XmlDocAccept.documentElement.selectSingleNode(nodestring).text
Else
AcceptSingleNode = ""
End If
End Function


'--------------------------------------------------
'打印接收端接收到的XML数据
'--------------------------------------------------
Public Sub PrintAcceptXmlData()
Response.Clear
Response.ContentType = "text/xml"
Response.CharSet = "gb2312"
Response.Expires = 0
If IsObject(m_XmlDocAccept) Then
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?>"&vbNewLine
Response.Write m_XmlDocAccept.documentElement.XML
Else
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?><root></root>"
End If
End Sub


Rem 保存接收的XML包数据到文件,文件名为acceptxml_日期.txt
Public Sub SaveAcceptXmlDataToFile()
Dim filename,str
filename = "acceptxml_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
If IsObject(m_XmlDocAccept) Then
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine
str = str & m_XmlDocAccept.documentElement.XML
Else
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine & "<root>" & vbNewLine & "</root>"
End If
str = str & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile filename,str
End Sub

''''''''''''''''''接收xml部分结束

Rem 保存调试数据到文件,文件名为debugnote_日期.txt
Public Sub SaveDebugStringToFile(debugstr)
Dim filename,str
filename = "debugnote_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & debugstr & vbNewLine
str = str & "---------------------------------------------"
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile filename,str
End Sub

'公共方法结束--------------------------

End Class
%>

测试用例:

sendxml.asp



<%
Option Explicit

Response.buffer = True
Response.Expires=-1
%>
<!--#include file="xmlcls.asp"-->

<%
Const Apisysno = "23498927347234234987"
Const ActionURL = "https://www.shouji138.com/aspnet2/acceptxml.asp" Rem 响应的文件 写url地址

Dim XmlClassObj
Set XmlClassObj = new XmlClass '创建对象
XmlClassObj.LoadXmlFromString("<?xml version=""1.0"" encoding=""gb2312""?><root/>") '用xml字符填充XMLDOC对象,用来发送xml
XmlClassObj.URL = ActionURL '设置响应的url


Rem xml格式
Rem "<?xml version="1.0" encoding="gb2312"?>
Rem <root>
Rem <sysno></sysno>
Rem <username></username>
Rem <pwd></pwd>
Rem <email></email>
Rem <pagename></pagename>
Rem <pageurl></pageurl>
Rem </root>


XmlClassObj.NodeValue "sysno",Apisysno,0,False
XmlClassObj.NodeValue "username","testusername",0,False
XmlClassObj.NodeValue "pwd","pwd",0,False
XmlClassObj.NodeValue "email","web@shouji138.com",0,False
XmlClassObj.NodeValue "pagename","站点",0,False
XmlClassObj.NodeValue "pageurl","https://www.shouji138.com",1,False


XmlClassObj.SaveSendXmlDataToFile() '将发送的xml数据库包存入txt文件


XmlClassObj.SendHttpData() '开始发送xml数据

'XmlClassObj.PrintGetXmlData() '打印接收到的xml数据
'response.write XmlClassObj.Message '打印错误信息
XmlClassObj.SaveGetXmlDataToFile() '将接收到的xml数据库存入txt文件
response.write XmlClassObj.GetSingleNode("//message") '显示收到的xml数据的msg节点的值
Set XmlClassObj = Nothing '销毁对象实例

%>

acceptxml.asp


<%
Rem Api用户注册接口
%>
<%
Response.Expires= -1
Response.Addheader "pragma","no-cache"
Response.AddHeader "cache-control","no-store"
%>
<!--#Include File="xmlcls.asp"-->
<%
Rem xml格式
Rem "<?xml version="1.0" encoding="gb2312"?>
Rem <root>
Rem <sysno></sysno>
Rem <username></username>
Rem <pwd></pwd>
Rem <email></email>
Rem <pagename></pagename>
Rem <pageurl></pageurl>
Rem </root>
Const Apisysno = "23498927347234234987"


On Error Resume Next
Dim XmlClassObj
Set XmlClassObj = new XmlClass '创建对象
XmlClassObj.AcceptHttpData() '接收xml数据
XmlClassObj.SaveAcceptXmlDataToFile() '将接收到的xml数据存入txt文件
Err.clear
Dim message


Dim sysno,username,pwd,email,PageName,PageURL
sysno = XmlClassObj.AcceptSingleNode("//sysno")
username = XmlClassObj.AcceptSingleNode("//username")
pwd = XmlClassObj.AcceptSingleNode("//pwd")
email = XmlClassObj.AcceptSingleNode("//email")
PageName = XmlClassObj.AcceptSingleNode("//pagename")
PageURL = XmlClassObj.AcceptSingleNode("//pageurl")

XmlClassObj.SaveDebugStringToFile("sysno=" & sysno) '存入debug日志文件

If Err Then
message = message & Err.Description
Else
Err.clear
If sysno <> Apisysno Then
message = "请务非法使用!"
Else
message = regUser(username,pwd,email,PageName,PageURL)
End If
End If

'XmlClassObj.SaveDebugStringToFile("message=" & message) '将message值存入debug日志文件

Set XmlClassObj = Nothing '销毁对象实例

Response.ContentType = "text/xml" '输出xml数据流给发送端
Response.Charset = "gb2312"
Response.Clear
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?>" & vbnewline
Response.Write "<root>" & vbnewline
Response.Write "<message>" & message & "</message>" & vbnewline
Response.Write "<nowtime>" & Now() & "</nowtime>" & vbnewline
Response.Write "</root>" & vbnewline


Function regUser(username,pwd,email,PageName,PageURL)
'''''''''''''''''''
''''''''''''''''''
'''''''''''''''''
'操作数据库注册用户
'''''''''''''''''
''''''''''''''
regUser = "OK"

End Function

下载地址:https://www.shouji138.com/files/Xmlcls.rar

演示地址:https://www.shouji138.com/aspnet2/sendxml.asp

举报

  • 相关推荐
  • 微信能自动发消息了!微信新增自动发送消息功能

    微信正在测试语音自动转文字并发送的新功能。该功能在聊天界面新增语音输入按钮,用户说话后系统会实时转换为文字显示在输入框。创新之处在于支持"over over"指令自动发送消息,实现全程语音自动化操作。测试显示普通话转换准确率较高,可替代手动输入提升效率。目前该功能仍处灰度测试阶段,仅向部分用户开放。微信表示将根据反馈持续优化,待成熟后再逐步扩大开放范围。这对双手忙碌或不便触屏的用户尤为实用。

  • 雷军:小米汽车APP已上线小米YU7车主指南

    雷军今天一早宣布,小米汽车APP已正式上线小米YU7车主指南,为广大车主带来了更便捷、贴心的服务。 晕车舒缓模式在哪里设置?调光天幕在哪里调节?露营模式怎么用 以后这些小技巧搜一下就能解决了。 小米YU7车主指南涵盖了车辆设置、驾驶、语音控制、辅助驾驶、充放电、账户钥匙、维修保养、应急救援等多方面,提供了视频介绍,非常直观。 对于车辆常见故障,指�

  • GPT-5有望明天发布 OpenAI:免费无限使用

    OpenAI宣布将于太平洋时间7月4日上午10点(北京时间7月5日凌晨1点)举办重要直播活动。官方预告中"LIVESTREAM"误写为"LIVE5TREAM",引发网友猜测可能暗示GPT-5即将发布。消息称免费版ChatGPT将在标准设置下开放GPT-5对话功能,但会设置防滥用阈值;Plus和Pro用户则可享受更智能的GPT-5服务,包括语音交互、绘图创作等高级功能。此前CEO奥特曼曾透露GPT-5将整合多项前沿技术。若属实,这将是AI爱好者的重大福利,也将进一步提升ChatGPT的实用性和用户体验。

  • 从 Soul App 用 AI 重塑内容社区,看 Gen AI 浪潮下的社交新范式

    高分治愈动画电影《玛丽和马克思》8月8日在中国院线上映,豆瓣评分9.0。影片通过两位孤独灵魂跨越半个地球的书信往来,探讨了人际关系的深刻主题。社交平台Soul App借助AI技术,让用户能与电影主角虚拟形象互动,延续影片治愈内核。这不仅是电影IP的数字化延伸,更是AI在情感陪伴领域的创新实践。Soul通过构建多元虚拟角色矩阵,打造"内容场+情感连接"的社交新生态,让AI成为缓解孤独、促进真实社交的桥梁,重新定义人机关系。平台数据显示,18%的用户发帖源于社交场景中的情感需求,印证了现代人普遍存在的孤独感。Soul正通过生成式AI技术,构建更具温度和效率的数字社交空间。

  • OpenAI正式发布GPT-5模型 网友:写作像诗人

    OpenAI在直播活动中正式推出新一代人工智能模型GPT-5,宣称其覆盖编程、数学、写作、健康咨询、视觉感知等核心领域,实现"公司迄今为止最重大的模型升级"。OpenAI首席执行官萨姆·奥尔特曼(Sam Altman)形容,与GPT-5交互如同与各领域专家对话,其多维度能力突破将重塑人机协作模式。 分层开放策略满足多元需求 GPT-5将于本周四启动全球用户分批推送,免费用户与付�

  • GPT-5横空出世:API最低0.40美元,人人享“博士级智慧”

    OpenAI正式发布新一代旗舰模型GPT-5,CEO奥尔特曼称其智能水平如同与博士级专家对话。该模型在写作、编码、医疗等核心领域表现突出,幻觉率大幅降低80%,输出token数量减少50%-80%。GPT-5系列包含多个版本,其中GPT-5nano的API价格低至0.4美元/百万token,极具竞争力。基准测试显示GPT-5以68分位居榜首,超越Grok-4等对手。OpenAI同时宣布向所有用户开放使用,并计划升级语音模式,探索

  • iPhone 18 Pro首发!苹果最强基带曝光

    上个月微软面向商业客户推出了Surface Laptop 5G版本,它支持Nano SIM卡和eSIM两种方式,还可作为热点为其他设备提供网络。在Surface Laptop推出5G之际,苹果也在着手准备5G版Mac设备。 苹果记者Mark Gurman爆料,苹果最快会在2026年在Mac电脑上配备自研5G基带芯片,这将是苹果史上首款支持5G网络的Mac设备。 据悉,2026年的Mac电脑将搭载苹果新一代基带芯片C2,这颗基带由iPhone 18 Pro率先搭

  • 减少幻觉、不再谄媚!OpenAI:即日起 史上最强大的GPT-5将免费提供给用户

    这是我们迄今为止最智能、最快、最实用的模型,具有内置思维,可将专家级智能交到每个人手中。” OpenAI在官方新闻稿中写道,这是我们迄今为止最优秀的人工智能系统。GPT-5的智能性能远超我们之前的所有模型,在编码、数学、写作、健康、视觉感知等领域均拥有卓越的性能。 GPT-5 不仅在基准测试中超越了之前的模型,回答问题的速度也更快,而且最重要的是,它对现�

  • 2026年见!OPPO Find N6 Flip即将回归:首发骁龙8 Elite2小折叠

    这款手机将是继2023年发布的Find N3 Flip之后,OPPO再次推出的第三款小折叠手机。 据爆料者透露,OPPO Find N6 Flip将采用全新的设计,可能会使用大量钛金属来构建机身,使其更加轻薄耐用。 此外,OPPO Find N6 Flip预计将搭载高通骁龙8 Elite 2处理器,这将是全球首款采用该芯片的折叠手机。

  • 谷歌Pixel 10 Pro XL渲染图曝光:两大配色 8月20日发布

    谷歌Pixel 10 Pro XL的官方宣传渲染图近日曝光,新机将于8月20日发布,还剩不到2周的时间。 此次谷歌Pixel 10 Pro XL提供了月石”(Moonstone)和黑曜石”(Obsidian)两种配色,分别呈现柔和的浅灰蓝色调和经典的暗灰配金属高光边框设计。 机身右侧依旧是电源键与音量键组合,背部为横向延展的胶囊形三摄模组,内含闪光灯及红外温度传感器,整体厚度与重量与上代基本一致。 �