且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用带有C#的ASP.NET在soap UI XML中获取节点值?

更新时间:2023-09-13 16:54:28

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();



System.Xml.Linq命名空间| Microsoft Docs [ ^


I want to get the value of nsAccVal:IBANNumber in the below soap UI XML. But getting the exception of Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.

My entire Soap envelope is as below:

<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>



What I have tried:

Code as below:

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");

XML namespaces are a pain. The System.Xml.Linq namespace makes life slightly easier:
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();


System.Xml.Linq Namespace | Microsoft Docs[^]