(一)TransferXML函数 Public Function TransferXMl(ByVal rawdata As String) As Hashtable Dim xmlDoc As New XmlDocument Dim clientPrescriptionNodes As XmlNodeList Dim clientPrescriptionNode As XmlNode Dim bodymark As Boolean = False Dim TempHashtable As New Hashtable Dim valuestr As String Dim v() As String xmlDoc.LoadXml(rawdata) clientPrescriptionNodes = xmlDoc.GetElementsByTagName("webmethod") //webmethod指从哪个标记开始读取childnode到哈希表中 For Each clientPrescriptionNode In clientPrescriptionNodes Dim baseDataNodes As XmlNodeList Dim baseDataNode As XmlNode Dim bFirstInRow As Boolean
baseDataNodes = clientPrescriptionNode.ChildNodes bFirstInRow = True For Each baseDataNode In baseDataNodes If (bFirstInRow) Then bFirstInRow = False Else Console.Out.Write(",") End If If baseDataNode.Name = "body" Then //此处body指内层再次嵌套的标记 bodymark = True Console.Out.Write(baseDataNode.Name & ":" & "参数") TempHashtable.Add("body", "1") Else Console.Out.Write(baseDataNode.Name & ":" & baseDataNode.OuterXml.ToString) valuestr = baseDataNode.OuterXml.ToString valuestr = Replace(valuestr, Chr(34), "$") v = valuestr.Split("$") valuestr = v(1) TempHashtable.Add(baseDataNode.Name, valuestr) End If Next Console.Out.WriteLine() Next If bodymark = True Then clientPrescriptionNodes = xmlDoc.GetElementsByTagName("body") For Each clientPrescriptionNode In clientPrescriptionNodes Dim baseDataNodes1 As XmlNodeList Dim baseDataNode1 As XmlNode Dim bFirstInRow1 As Boolean
baseDataNodes1 = clientPrescriptionNode.ChildNodes bFirstInRow1 = True For Each baseDataNode1 In baseDataNodes1 If (bFirstInRow1) Then bFirstInRow1 = False Else Console.Out.Write(",") End If Console.Out.Write(baseDataNode1.Name & ":" & baseDataNode1.InnerText) TempHashtable.Add(baseDataNode1.Name, baseDataNode1.InnerText) Next Console.Out.WriteLine() Next End If TransferXMl = TempHashtable Exit Function End Function
(二)GetReqResult函数 Public Function GetReqResult(ByVal scontent As String) As Hashtable Dim snode As String '节点名称 Dim svalue As String '单个节点值 Dim mvalue As String = "" '多个节点值 Dim reqResult As New Hashtable 'Http请求内容列表
Dim strReader As StringReader = New StringReader(scontent) Dim reader As XmlTextReader = New XmlTextReader(strReader) While (reader.Read()) snode = reader.Name Select Case snode Case "action_id" //每个case表示一个标记符 reader.Read() svalue = reader.Value reqResult.Add(snode, svalue) reader.Read() Case "service_id" reader.Read() svalue = reader.Value reqResult.Add(snode, svalue) reader.Read() Case "mid" reader.Read() svalue = reader.Value reqResult.Add(snode, svalue) reader.Read() Case "mobile_id" reader.Read() svalue = reader.Value reqResult.Add(snode, svalue) reader.Read() Case "access_mode" //当access_mode有连续两个时,用这种方法进行对接 reader.Read() If mvalue = "" Then mvalue = reader.Value Else mvalue = mvalue + "|" + reader.Value End If reader.Read() End Select End While If mvalue <> "" Then reqResult.Add("access_mode", mvalue) End If GetReqResult = reqResult End Function
----------------------- (三)两个函数被调用时的方法 Dim coll As NameValueCollection Dim sParam As String Dim reqbyte As Byte() 'Http请求字节流 Dim Result As Hashtable 'Http请求内容列表 coll = Request.Headers Dim ResStr As String = "" Dim Resbyte As Byte() Dim c(19) As String reqbyte = Request.BinaryRead(Request.ContentLength) sParam = System.Text.Encoding.ASCII.GetString(reqbyte) If sParam <> "" Then GetReqResult(sParam) If TransferXMl(sParam, Result) Then c(0) = lastvalue c(1) = Result.Item("Version") c(2) = Result.Item("MsgType") ........ c(19) = Result.Item("FeatureStr") ResStr = ResStr + "<?xml version=" + Chr(34) + "1.0" + Chr(34) + " ?>" ResStr = ResStr + "<......></......>" Resbyte = System.Text.Encoding.ASCII.GetBytes(ResStr) Response.BinaryWrite(Resbyte) ------------------------------------- (四)将XML存入SQL SERVER数据库 Private Sub saveOrderData(ByVal c() As String) Dim myConnection As New SqlConnection Dim mySelectQuery As String Dim myCommand As SqlCommand Dim brandstr As String
Try
myConnection = New SqlConnection("user id=sa ; password=; initial catalog=GOGO ; data source = 127.0.0.1") myConnection.Open() mySelectQuery = "insert into SyncOrderRelationReq(TransactionID,Version,MsgType,DeviceType,DeviceID,DeviceType1,DeviceID1,UserIDType,MSISDN,PseudoCode,UserIDType1,MSISDN1,PseudoCode1,LinkID,ActionID,ActionReasonID,SPID,SPServiceID,AccessMode,FeatureStr) values(" & c(0) & ",'" & c(1) & "','" & c(2) & "','" & c(3) & "','" & c(4) & "','" & c(5) & "','" & c(6) & "','" & c(7) & "','" & c(8) & "',CONVERT(binary,'" & c(9) & "'),'" & c(10) & "','" & c(11) & "',CONVERT(binary,'" & c(12) & "'),'" & c(13) & "','" & c(14) & "','" & c(15) & "','" & c(16) & "','" & c(17) & "','" & c(18) & "',CONVERT(binary,'" & c(19) & "')) " myCommand = New SqlCommand(mySelectQuery, myConnection) myCommand.ExecuteNonQuery() Catch End Try End Sub

|