簡體   English   中英

C#從XML獲取節點元素

[英]c# Fetch nodes elements from xml

我需要在控制台應用程序中使用C#從XML文件的enquiryRecord節點獲取並顯示第1和第3列元素。

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>

編碼:

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

我應該如何進行?

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為避免在沒有此類位置的情況下避免IndexOutOfRange異常。
  • ?. -為了避免在位置不存在並返回默認值的情況下發生NullReferenceException

問題是上面的代碼缺少那些元素的名稱空間上的添加。 有關更多說明,請參見此問題

您可以使用XPath解析XML

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

我確信這可以改善,但是當我需要解析和XML文件時,我通常會使用XPath。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM