一、MSXML和SOAP简介
- 在Visual Studio等开发环境中,开发人员可以通过引用MSXML库,并在代码中创建MSXML对象来加载、操作和保存XML文档。例如,可以使用
MSXML2.DOMDocument
对象来加载XML文件,并使用其提供的方法和属性来访问和修改XML数据。 - SOAP消息通常用于Web服务的调用和响应。当客户端需要调用服务器上的Web服务时,它会构造一个SOAP请求消息,并将其发送给服务器。服务器接收到请求后,会处理请求并构造一个SOAP响应消息返回给客户端。SOAP消息可以通过HTTP、SMTP等协议进行传输,这使得它可以在不同的网络环境中使用。
- 在处理SOAP消息时,MSXML组件可以被用来解析、验证、转换和查询SOAP消息的XML内容。开发人员可以使用MSXML提供的API和接口来操作SOAP消息的XML结构,从而实现Web服务的调用和响应。
二、实例举例
下面是在VB中使用Microsoft XML 3.0插件请求获取解析web service的实例。
' 引用MSXML组件
Dim xmlhttp As MSXML2.ServerXMLHTTP
Dim soapEnvelope As String
Dim url As String
Dim xmlResponse As String
Dim xmlDoc As MSXML2.DOMDocument
Dim nodeList As MSXML2.IXMLDOMNodeList
Dim node As MSXML2.IXMLDOMNode
Dim i As Integer
Dim strXML As String
Dim str会诊结果 As String
' 初始化MSXML对象
Set xmlhttp = New MSXML2.ServerXMLHTTP
Set xmlDoc = New MSXML2.DOMDocument
' 设置Web Service的URL
url = "http://pacs.zjgws.com:8132/riswebservice.asmx?DXDL"
' 构造SOAP请求消息
soapEnvelope = "<?xml version='1.0' encoding='utf-8'?>" & _
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>" & _
"<soap:Body>" & _
"<PatientRegister_Xml xmlns='http://tempuri.org/'>" & _
"<op>OP005</op>" & _
"<inputXml><![CDATA[" & str版本信息 & "]]></inputXml>" & _
"</PatientRegister_Xml>" & _
"</soap:Body>" & _
"</soap:Envelope>"
' 设置HTTP请求头
xmlhttp.Open "POST", url, False
xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
xmlhttp.setRequestHeader "SOAPAction", "http://tempuri.org/PatientRegister_Xml"
' 发送SOAP请求
xmlhttp.send soapEnvelope
' 获取并处理响应
xmlResponse = xmlhttp.responseText
If xmlhttp.Status = 200 Then
' 请求成功,处理返回的SOAP响应
If xmlDoc.loadXML(xmlResponse) Then
' XML加载成功,开始解析
Set nodeList = xmlDoc.getElementsByTagName("PatientRegister_XmlResult")
For i = 0 To nodeList.Length - 1
Set node = nodeList.Item(i)
strXML = node.Text
Next i
gddtXml.loadXML strXML
If gddtXml.selectNodes("//Response/Report/ConsultationStatus").Item(0).Text = 1 Then
txt检查所见.Text = gddtXml.selectNodes("//Response/Report/Description").Item(0).Text
txt诊断意见.Text = gddtXml.selectNodes("//Response/Report/Impression").Item(0).Text
txt报告结果.Text = IIf(gddtXml.selectNodes("//Response/Report/Abnormalflag").Item(0).Text = 1, "阳性", "阴性")
If txt报告结果.Text = "阳性" Then
txt报告结果.BackColor = "&H000000FF&"
End If
txt报告人.Text = gddtXml.selectNodes("//Response/Report/Consultationdoc").Item(0).Text
Label7.Caption = "会诊医生"
txt报告时间.Text = gddtXml.selectNodes("//Response/Report/Consultationdate").Item(0).Text
Label16.Caption = "会诊日期"
Else
MsgBox "未会诊!", vbInformation, gstrSysName
End If
Else
' XML加载失败,处理错误
Debug.Print "Error loading XML response: " & xmlDoc.parseError.reason
End If
Else
' 请求失败,处理错误
Debug.Print "Error: " & xmlhttp.Status & " - " & xmlhttp.statusText
End If
' 清理
Set node = Nothing
Set nodeList = Nothing
Set xmlDoc = Nothing
Set xmlhttp = Nothing