ranio Ответов: 1

Как получить значение узла в XML, используя мыло пользовательского интерфейса ASP.NET с помощью C#?


Я хочу получить значение nsAccVal:IBANNumber в приведенном ниже XML-интерфейсе soap UI. Но, не получив за исключением диспетчер пространств имен или XsltContext нужны. Этот запрос имеет префикс, переменную или определяемую пользователем функцию.

Весь мой мыльный конверт выглядит следующим образом:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <nsAccVal:EAIServices xmlns:nsAccVal="http://www.iibcdm.T24systems.com/FTAccountValidation" xmlns:nsT24sys="http://www.iibcdm.T24systems.com" xmlns:nsHdr="http://www.iibcdm.header.com">
         <nsAccVal:Header>
            <nsHdr:MsgVersion>v 1.0</nsHdr:MsgVersion>
            <nsHdr:SrcAppId>IPI</nsHdr:SrcAppId>
            <nsHdr:SrcMsgId>20180916191655591</nsHdr:SrcMsgId>
            <nsHdr:SrcAppTimestamp>2018-09-09T19:12:55.5884814+04:00</nsHdr:SrcAppTimestamp>
            <nsHdr:SrvCode>QACCVAL</nsHdr:SrvCode>
            <nsHdr:SrvName>FTAccountValidation</nsHdr:SrvName>
            <nsHdr:TrackingId>20180916191655590</nsHdr:TrackingId>
            <nsHdr:Language>en_US</nsHdr:Language>
            <nsHdr:BankId>FH</nsHdr:BankId>
            <nsHdr:InstanceId/>
            <nsHdr:TargetApp/>
            <nsHdr:Status>S</nsHdr:Status>
            <nsHdr:EAITimestamp>2018-09-09T19:12:55.5884814+04:00</nsHdr:EAITimestamp>
            <nsHdr:SecurityInfo>
               <nsHdr:UserId/>
               <nsHdr:Password/>
            </nsHdr:SecurityInfo>
            <nsHdr:AdditionalData>
               <nsHdr:Group/>
               <nsHdr:nameValue/>
            </nsHdr:AdditionalData>
         </nsAccVal:Header>
         <nsAccVal:Body>
            <nsAccVal:FTAccountValidationRes>
               <nsAccVal:IBANNumber>AE710810000001219412001</nsAccVal:IBANNumber>
               <nsAccVal:AccountStatus>Inactive</nsAccVal:AccountStatus>
               <nsAccVal:AvailableBalance>0.00</nsAccVal:AvailableBalance>
               <nsAccVal:AccountName>ACTITLE1</nsAccVal:AccountName>
               <nsAccVal:EmailId>B.BHATT@LIVE.COM</nsAccVal:EmailId>
               <nsAccVal:MobileNumber>0501671809</nsAccVal:MobileNumber>
            </nsAccVal:FTAccountValidationRes>
            <nsAccVal:ExceptionDetails>
               <nsHdr:ErrorCode>000</nsHdr:ErrorCode>
               <nsHdr:ErrorDescription>Success</nsHdr:ErrorDescription>
            </nsAccVal:ExceptionDetails>
         </nsAccVal:Body>
      </nsAccVal:EAIServices>
   </soapenv:Body>
</soapenv:Envelope>


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

Код как показано ниже:
string ResponseAPI = System.IO.File.ReadAllText(@"F:\Sample.txt");


           XmlDocument xml = new XmlDocument();
           xml.LoadXml(ResponseAPI);
           //XmlNodeList xNodeList = xml.SelectNodes("/nsAccVal:EAIServices/nsAccVal:Body/nsAccVal:FTAccountValidationRes/nsAccVal:FTAccountValidationRes");
           XmlNodeList xNodeList = xml.SelectNodes("/nsAccVal:EAIServices/nsAccVal:Body/nsAccVal:FTAccountValidationRes");

F-ES Sitecore

Google для использования xmldocument с namesapces вам необходимо использовать XmlNamespaceManager для определения вашего пространства имен и добавления префикса пространства имен в ваши запросы. Вот вам пример

https://techoctave.com/c7/posts/113-c-reading-xml-with-namespace

но если вы погуглите вы найдете больше

1 Ответов

Рейтинг:
1

Richard Deeming

Пространства имен XML-это боль. То System.Xml.Linq пространство имен делает жизнь немного проще:

XDocument xml = XDocument.Parse(ResponseAPI);
XNamespace nsAccVal = "http://www.iibcdm.T24systems.com/FTAccountValidation";
IEnumerable<XElement> xNodeList = xml.Descendants(nsAccVal + "IBANNumber");
string ibanNumber = (string)xNodeList.FirstOrDefault();

Системы.В формате XML.Средства LINQ Имен | Майкрософт Документы[^]