0

I need to get fetch and display the 1st and 3rd column element from the enquiryRecord node from an XML file using C# in a console app.

The XML:

    <?xml version="1.0" encoding="UTF-8"?>
<T24 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.temenos.com/T24/OFSML/130 ofsml13.xsd" xmlns="http://www.temenos.com/T24/OFSML/130">
  <serviceResponse>
    <ofsStandardEnquiry name="E.FOS.REQ.INFO.1.MCB" status="OK">
      <enquiryColumn id="RETURN.CODE" label="RETURN.CODE" type="ALPHANUMERIC"/>
      <enquiryColumn id="ERROR.MSG" label="ERROR.MSG" type="ALPHANUMERIC"/>
      <enquiryColumn id="CUSTOMER" label="CUSTOMER" type="ALPHANUMERIC"/>
      <enquiryColumn id="SHORT.NAME" label="SHORT.NAME" type="ALPHANUMERIC"/>
      <enquiryColumn id="IS.INDIVIDUAL" label="IS.INDIVIDUAL" type="ALPHANUMERIC"/>
      <enquiryColumn id="IS.MINOR" label="IS.MINOR" type="ALPHANUMERIC"/>
      <enquiryColumn id="IS.MCB.STAFF" label="IS.MCB.STAFF" type="ALPHANUMERIC"/>
      <enquiryColumn id="IS.ACTIVE.CUSTOMER" label="IS.ACTIVE.CUSTOMER" type="ALPHANUMERIC"/>
      <enquiryColumn id="IS.KYC.COMPLIANT" label="IS.KYC.COMPLIANT" type="ALPHANUMERIC"/>
      <enquiryColumn id="PHONE" label="PHONE" type="ALPHANUMERIC"/>
      <enquiryColumn id="OFF.PHONE" label="OFF.PHONE" type="ALPHANUMERIC"/>
      <enquiryColumn id="SMS" label="SMS" type="ALPHANUMERIC"/>
      <enquiryColumn id="EMAIL" label="EMAIL" type="ALPHANUMERIC"/>
      <enquiryColumn id="DE.ADDRESS.ID" label="DE.ADDRESS.ID" type="ALPHANUMERIC"/>
      <enquiryColumn id="STREET.ADDR" label="STREET.ADDR" type="ALPHANUMERIC"/>
      <enquiryColumn id="ADDRESS.LINE2" label="ADDRESS.LINE2" type="ALPHANUMERIC"/>
      <enquiryColumn id="ADDRESS.LINE3" label="ADDRESS.LINE3" type="ALPHANUMERIC"/>
      <enquiryColumn id="TOWN.COUNTRY" label="TOWN.COUNTRY" type="ALPHANUMERIC"/>
      <enquiryColumn id="POST.CODE" label="POST.CODE" type="ALPHANUMERIC"/>
      <enquiryColumn id="COUNTRY" label="COUNTRY" type="ALPHANUMERIC"/>
      <enquiryColumn id="COUNTRY.CODE" label="COUNTRY.CODE" type="ALPHANUMERIC"/>
      <enquiryColumn id="CONTACT.ADD" label="CONTACT.ADD" type="ALPHANUMERIC"/>
      <enquiryColumn id="JOINT.BORR" label="JOINT.BORR" type="ALPHANUMERIC"/>
      <enquiryColumn id="SHORT.NAME" label="SHORT.NAME" type="ALPHANUMERIC"/>
      <enquiryColumn id="APPLICATION.DATE" label="APPLICATION.DATE" type="ALPHANUMERIC"/>
      <enquiryColumn id="CO.CODE" label="CO.CODE" type="ALPHANUMERIC"/>
      <enquiryColumn id="COMPANY.NAME" label="COMPANY.NAME" type="ALPHANUMERIC"/>
      <enquiryColumn id="PROCESS.DEFINITION" label="PROCESS.DEFINITION" type="ALPHANUMERIC"/>
      <enquiryColumn id="PROCESS.DEFINITION.DESC" label="PROCESS.DEFINITION.DESC" type="ALPHANUMERIC"/>
      <enquiryColumn id="FOS.TYPE" label="FOS.TYPE" type="ALPHANUMERIC"/>
      <enquiryColumn id="COLLATERAL.ID" label="COLLATERAL.ID" type="ALPHANUMERIC"/>
      <enquiryColumn id="COLL.CCY" label="COLL.CCY" type="ALPHANUMERIC"/>
      <enquiryColumn id="COLL.AMT" label="COLL.AMT" type="ALPHANUMERIC"/>
      <enquiryColumn id="ASSET.ID" label="ASSET.ID" type="ALPHANUMERIC"/>
      <enquiryColumn id="MAXIMUM.AMT" label="MAXIMUM.AMT" type="ALPHANUMERIC"/>
      <enquiryColumn id="FACILITY.TYPE" label="FACILITY.TYPE" type="ALPHANUMERIC"/>
      <enquiryColumn id="RF.LIMIT.TYPE" label="RF.LIMIT.TYPE" type="ALPHANUMERIC"/>
      <enquiryColumn id="RF.LIMIT.DESC" label="RF.LIMIT.DESC" type="ALPHANUMERIC"/>
      <enquiryColumn id="RF.LIMIT.CCY" label="RF.LIMIT.CCY" type="ALPHANUMERIC"/>
      <enquiryColumn id="RF.LIMIT.CCY.DESC" label="RF.LIMIT.CCY.DESC" type="ALPHANUMERIC"/>
      <enquiryColumn id="RF.LIMIT.AMT" label="RF.LIMIT.AMT" type="ALPHANUMERIC"/>
      <enquiryColumn id="RF.LIMIT.EXP.DATE" label="RF.LIMIT.EXP.DATE" type="ALPHANUMERIC"/>
      <enquiryColumn id="RF.LIMIT.REVIEW.DATE" label="RF.LIMIT.REVIEW.DATE" type="ALPHANUMERIC"/>
      <enquiryColumn id="CATEGORY" label="CATEGORY" type="ALPHANUMERIC"/>
      <enquiryColumn id="CATEGORY.DESC" label="CATEGORY.DESC" type="ALPHANUMERIC"/>
      <enquiryColumn id="BOM.PURPOSE" label="BOM.PURPOSE" type="ALPHANUMERIC"/>
      <enquiryColumn id="HOUSING.PURPOSE.ID" label="HOUSING.PURPOSE.ID" type="ALPHANUMERIC"/>
      <enquiryColumn id="HOUSING.PURPOSE.DESC" label="HOUSING.PURPOSE.DESC" type="ALPHANUMERIC"/>
      <enquiryColumn id="TERM" label="TERM" type="ALPHANUMERIC"/>
      <enquiryColumn id="NRF.CCY" label="NRF.CCY" type="ALPHANUMERIC"/>
      <enquiryColumn id="NRF.CCY.DESC" label="NRF.CCY.DESC" type="ALPHANUMERIC"/>
      <enquiryColumn id="NRF.AMT" label="NRF.AMT" type="ALPHANUMERIC"/>
      <enquiryRecord>
        <column>0</column>
        <column/>
        <column>1123785</column>
        <column>SONAyerG</column>
        <column>N</column>
        <column/>
        <column/>
        <column>Y</column>
        <column>N</column>
        <column>7y0</column>
        <column/>
        <column/>
        <column/>
        <column>MU00y.C-1123785.PRINT.1</column>
        <column>C.OyL</column>
        <column>HOy1</column>
        <column/>
        <column>VAyrAS</column>
        <column/>
        <column>yrUS</column>
        <column>MU</column>
        <column/>
        <column/>
        <column/>
        <column>20ry7</column>
        <column>MU0yr001</column>
        <column>MCB - T24 R14 SIM</column>
        <column>FOS.MCB</column>
        <column>Secured Facilities-Non Individual</column>
        <column>SECURED</column>
        <column>CO.1123785.1|CO.1123785.2|CO.1123785.5|CO.1123785.7|CO.1123785.11|CO.1123785.6|CO.1123785.3</column>
        <column>MUR|MUR|MUR|MUR|MUR|MUR|MUR</column>
        <column>610000|1014000|1014000|350000|1000000.00|750000.00|1500000</column>
        <column>AS.1123785.1]AS.437756.1|AS.1123785.1|AS.437756.2|AS.1123785.5|AS.1123785.1]AS.437756.3]AS.765697.1|AS.1123785.4|AS.1123785.2</column>
        <column>1500000]||||]]||</column>
        <column>REVOLVING|REVOLVING|REVOLVING|REVOLVING|REVOLVING|REVOLVING</column>
        <column>101000|107010|107020|107030|107040|107050</column>
        <column>OVERDRAFTS|MISC GTEES|TENDER BONDS|PERF BONDS|ADV PAYMT BONDS|FINANCIAL GTEES</column>
        <column>MUR|MUR|MUR|MUR|MUR|MUR</column>
        <column>Mauritian Rupee|Mauritian Rupee|Mauritian Rupee|Mauritian Rupee|Mauritian Rupee|Mauritian Rupee</column>
        <column>2800000.00|1600000.00|1600000.00|1600000.00|1600000.00|1600000.00</column>
        <column>29990101|29990101|29990101|29990101|29990101|29990101</column>
        <column>20160430|20160430|20160430|20160430|20160430|20160430</column>
        <column>|||||</column>
        <column>|||||</column>
        <column>|||||</column>
        <column>|||||</column>
        <column>|||||</column>
        <column>|||||</column>
        <column>|||||</column>
        <column>|||||</column>
        <column>|||||</column>
      </enquiryRecord>
    </ofsStandardEnquiry>
  </serviceResponse>
</T24>

The code:

var columns = XDocument.Load("XML01.xml").Root
                   .Descendants("enquiryRecord") 
                   .Descendants("column")
                   .ToList();

        Console.WriteLine((string)columns.ElementAtOrDefault(5)); // 0
        Console.WriteLine((string)columns.ElementAtOrDefault(10)); // data
        Console.ReadLine();

How shall I proceed?

velvt
  • 143
  • 1
  • 3
  • 13

2 Answers2

1
XNamespace ns = "http://www.temenos.com/T24/OFSML/130";

var columns = XDocument.Load("XML01.xml")
       .Descendants(ns + "enquiryRecord")
       .Descendants(ns + "column")
       .ToList();

Console.WriteLine(columns.ElementAtOrDefault(0)?.Value); // 0
Console.WriteLine(columns.ElementAtOrDefault(2)?.Value); // data

// Or
Console.WriteLine((string)columns.ElementAtOrDefault(0)); // 0
Console.WriteLine((string)columns.ElementAtOrDefault(2)); // data
  • ElementAtOrDefault - To avoid IndexOutOfRange exception in the case there is not such position.
  • ?. - To avoid NullReferenceException in the case that position doesn't exist and returned default value

The problem was that the above code was missing the adding on the namespace of those elements. See this question for more clarification

Community
  • 1
  • 1
Gilad Green
  • 36,708
  • 7
  • 61
  • 95
  • Their is an error on Console.WriteLine(columns.ElementAtOrDefault(0)?.Value); It says : is expected. – velvt Aug 11 '16 at 07:12
  • Its returning null for both column instead of '0' and 'data'. – velvt Aug 11 '16 at 08:09
  • 1
    Just using `(string)columns.ElementAtOrDefault(0)` will work in either C# version. – Charles Mager Aug 11 '16 at 08:14
  • @GiladGreen still returning null. – velvt Aug 12 '16 at 05:18
  • @GiladGreen I actually have columns at those index in the full XML and changing the index still returns null. – velvt Aug 12 '16 at 05:52
  • @velvt - Check edit of code + description at bottom of answer. Also - if you check your xml then elements at index 0 and 10 are really with no value - remember that the first column in the collection has index of 0 – Gilad Green Aug 12 '16 at 06:16
  • @velvt - if my answer + extra explanations helped you please consider marking question as solve and upvoting it – Gilad Green Aug 12 '16 at 07:02
1

you could parse your XML using XPath

var xDocument = XDocument.Load(fileName);
var selectedNodes = xDocument.Root.XPathSelectElements("./node2/ofsStandardEnquiry/enquiryRecord/column");


var nodeArray = selectedNodes.Select(s => s.Value).ToArray();
Console.WriteLine(nodeArray[0]);
Console.WriteLine(nodeArray[2]);

I am sure this can be improved, but I usually use XPath when I need to parse and XML file.

Angela
  • 477
  • 1
  • 10
  • 20