您的位置:首页 > 其它

解析XML方法两则

2004-11-08 00:12 471 查看
(一)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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: