Я унаследовал классическую страницу asp, которая использует веб-сервисы, и я относительно новичок в этом. Запросы и ответы работают нормально, но я заметил, что префикс добавляется в пространство имен где-то между wsdl и мной, читающим его. Таким образом, пространство имен <FirstName>
получится <ns2:FirstName>
или иногда <ns3:FirstName>
или иногда просто <FirstName>
. Это точно такой же элемент, но префикс меняется очень часто.
Мне сказали, что я читаю ответ «сырой», и мне нужно отфильтровать эти дополнительные сгенерированные префиксы, но я не знаю как.
Вот фрагмент кода того, как я использую веб-сервис (некоторые вещи были изменены, чтобы сделать это простым):
Dim oXmlHTTP, objxml, SOAPRequest, SOAPResponse
Set oXmlHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
oXmlHTTP.open "POST", "http://something.com/something/services/something?wsdl", False
oXmlHTTP.setRequestHeader "Content-Type", "text/xml; charset=UTF-8"
SOAPRequest = _
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:head='http://header.something.com" xmlns:ser='http://service.something.com' xmlns:add='http://service.something.com/domain/address'>" &_
"<soapenv:Body>" &_
"<ser:getInfo>" &_
"<add:ID>123</add:ID>" &_
"</ser:getInfo>" &_
"</soapenv:Body>" &_
"</soapenv:Envelope>"
On Error Resume Next
oXmlHTTP.send SOAPRequest
If Err.Number Then
Response.Write("Error: " & Err.Description)
Err.Clear
Else
SOAPResponse = oXmlHTTP.responseText
End If
On Error Goto 0
If LEN(SOAPResponse) > 0 then
Set objxml = Server.CreateObject("MSXML2.DOMDocument.3.0")
objxml.async = False
objxml.load (oXmlHTTP.responseXML)
If objxml.parseError.errorCode <> 0 Then
Response.Write("XML error")
End If
'This is where the "error" will occur, as the <Firstname> sometimes isn't recognized, and I must search for e.g. <ns2:Firstname> instead
Set nodeList = objxml.getElementsByTagName("FirstName")
SizeofObject = nodeList.length-1
For i = 0 To (SizeofObject)
Response.Write ("Name: " & objxml.getElementsByTagName("FirstName").item(i).Text)
Next
End If
Set oXmlHTTP = Nothing
SOAPRequest = ""
SOAPResponse = ""
Как я могу игнорировать эти "случайные" префиксы, которые могут возникнуть? Есть ли лучшая практика использовать вызовы веб-службы в классическом ASP? (переход на .NET сейчас не вариант). Любая помощь приветствуется.