danash Ответов: 1

SOAP envelope xmlelement directcast не работает


Я успешно потребляю XML-ответ конверта SOAP веб-службы. Я включил сокращенную версию в нижней части.

(#1) Когда я использую:
Dim totalcost1 As String = cfnroot.SelectNodes("GetRateQuoteResponse/GetRateQuoteResult/TotalCharges").Item(0).InnerText

Я получаю значение 2597.01, которое является правильным.
(#2) Когда я использую:
im totalcost As XmlElement = DirectCast(CFLxmldoc.SelectSingleNode("df:GetRateQuoteResponse/df:GetRateQuoteResult/df:TotalCharges", mgr), XmlElement)

Я вообще не получаю никакой ценности.
Я предпочитаю использовать синтаксис #2 и всегда использовал его. Я не могу понять, почему я не получаю никакой ценности от #2. Я считаю, что легче проверить пустые значения или узлы, которых нет. Это мой первый раз, когда я использую конверт SOAP XML. Обычно используйте REST/URL.

<?xml version="1.0"?>
<SOAP-ENV:Body xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <GetRateQuoteResponse	xmlns="">
    <GetRateQuoteResult>
      <Date>03/22/2019</Date>
      <Time>12:06:22</Time>
      <DeficitAmount>152.84</DeficitAmount>
      <TotalCharges>2597.01</TotalCharges>
      <NetCharges>918.91</NetCharges>
     </GetRateQuoteResult>
  </GetRateQuoteResponse>
</SOAP-ENV:Body>


Что я уже пробовал:

Dim CFLresponse = CFLService.GetRateQuoteXml(CFLRaterequest)
Dim ResponseXML As String = CFLresponse.InnerXml
Dim CFLxmldoc As XmlDocument = New XmlDocument
CFLxmldoc.LoadXml(ResponseXML)

    Dim mgr As New XmlNamespaceManager(CFLxmldoc.NameTable)
mgr.AddNamespace("df", CFLxmldoc.DocumentElement.NamespaceURI)
Dim cfnroot As XmlElement = CFLxmldoc.DocumentElement

Dim totalcost As XmlElement = DirectCast(CFLxmldoc.SelectSingleNode("df:GetRateQuoteResponse/df:GetRateQuoteResult/df:TotalCharges", mgr), XmlElement)

Dim totalcost1 As String = cfnroot.SelectNodes("GetRateQuoteResponse/GetRateQuoteResult/TotalCharges").Item(0).InnerText

1 Ответов

Рейтинг:
5

Richard Deeming

Две проблемы:

1) Ваш SelectSingleNode вызов начинается с документа, в то время как ваш SelectNodes вызов начинается с корневого узла.

2) Ваш SelectSingleNode вызов ищет узлы в системе "http://schemas.xmlsoap.org/soap/envelope/" пространство имен, тогда как ваш SelectNodes вызов ищет узлы без пространства имен.

Попробуй:

Dim totalcost As XmlElement = DirectCast(cfnroot.SelectSingleNode("GetRateQuoteResponse/GetRateQuoteResult/TotalCharges"), XmlElement)