解析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
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
相关文章推荐
- javascript 解析后的xml对象的读取方法细解
- 详解Java解析XML的四种方法
- Java解析XML的四种方法
- php解析xml的方法
- Android APK XML解析与反编译方法
- Android进阶2之SAX方法解析XML
- 解析xml的几种方法,他们的原理,比较 以及JAVA源码
- Android中三种解析XML的方法
- 使用jquery解析XML的方法
- XML解析-第三方和系统方法
- 解析XML的方法
- 四种生成和解析XML文档的方法详解
- xml多层嵌套解析方法SAX方式(包括网络请求)
- Android开发之XML文件的解析的三种方法
- PHP读取、解析XML的方法.
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
- JAVA解析XML的四种方法
- XML(二):四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
- Java/android中解析xml的3种方法