简体   繁体   中英

c# Fetch nodes elements from xml

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?

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM