简体   繁体   中英

Retrieve Xml identical nodes C#

I am unable to get the identical XML nodes from the following XML file. I don't understand why this code

XmlNodeList xList = xmlRespDoc.SelectNodes("/FCUBS_BODY/Cust-Account-Full/Txn-Profile");

is returning NULL. What I wanted to do is, retrieve all the identical nodes <Txn-Profile> and put in in a string array or list. I think I am missing something here to retrieve my desired output.

Please suggest.

XML:

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S='http://schemas.xmlsoap.org/soap/envelope/'>
  <S:Header>
    <work:WorkContext xmlns:work='http://oracle.com/weblogic/soap/workarea/'>rO0ABXekABx3ZWJs</work:WorkContext>
  </S:Header>
  <S:Body>
    <QUERYCUSTACC_IOFS_RES xmlns='http://fcubs.ofss.com/service/FCUBSAccService'>
      <FCUBS_HEADER>
        <SERVICE>FCUBSAccService</SERVICE>
        <OPERATION>QueryCustAcc</OPERATION>
        <SOURCE_OPERATION></SOURCE_OPERATION>
        <MSGSTAT>SUCCESS</MSGSTAT>
        <ADDL/>
      </FCUBS_HEADER>
      <FCUBS_BODY>
        <Cust-Account-Full>
          <Txn-Profile>
            <TXN_CODE>CHD</TXN_CODE>
            <NO_OF_TXN>5</NO_OF_TXN>
            <MAX_TXN_AMOUNT>100000</MAX_TXN_AMOUNT>
            <TOTAL_AMOUNT>150000</TOTAL_AMOUNT>
            <TXN_DESCUI>Cash Deposit1</TXN_DESCUI>
          </Txn-Profile>
          <Txn-Profile>
            <TXN_CODE>CHW</TXN_CODE>
            <NO_OF_TXN>8</NO_OF_TXN>
            <MAX_TXN_AMOUNT>150000</MAX_TXN_AMOUNT>
            <TOTAL_AMOUNT>200000</TOTAL_AMOUNT>
            <TXN_DESCUI>Cash Withdrawal1</TXN_DESCUI>
          </Txn-Profile>
          <Txn-Profile>
            <TXN_CODE>DCL</TXN_CODE>
            <NO_OF_TXN>5</NO_OF_TXN>
            <MAX_TXN_AMOUNT>100000</MAX_TXN_AMOUNT>
            <TOTAL_AMOUNT>200000</TOTAL_AMOUNT>
            <TXN_DESCUI>Deposit By Instruments (Clearing)</TXN_DESCUI>
          </Txn-Profile>
          <Txn-Profile>
            <TXN_CODE>DFR</TXN_CODE>
            <NO_OF_TXN>1</NO_OF_TXN>
            <MAX_TXN_AMOUNT>100000</MAX_TXN_AMOUNT>
            <TOTAL_AMOUNT>100000</TOTAL_AMOUNT>
            <TXN_DESCUI>Deposit Of Foreign Remittance </TXN_DESCUI>
          </Txn-Profile>
          <Txn-Profile>
            <TXN_CODE>DFT</TXN_CODE>
            <NO_OF_TXN>5</NO_OF_TXN>
            <MAX_TXN_AMOUNT>100000</MAX_TXN_AMOUNT>
            <TOTAL_AMOUNT>200000</TOTAL_AMOUNT>
            <TXN_DESCUI>Deposit By Instruments (Internal FT)</TXN_DESCUI>
          </Txn-Profile>
          <Txn-Profile>
            <TXN_CODE>WCL</TXN_CODE>
            <NO_OF_TXN>5</NO_OF_TXN>
            <MAX_TXN_AMOUNT>80000</MAX_TXN_AMOUNT>
            <TOTAL_AMOUNT>100000</TOTAL_AMOUNT>
            <TXN_DESCUI>Withdrawal By Instruments (Clearing)</TXN_DESCUI>
          </Txn-Profile>
          <Txn-Profile>
            <TXN_CODE>WFT</TXN_CODE>
            <NO_OF_TXN>5</NO_OF_TXN>
            <MAX_TXN_AMOUNT>50000</MAX_TXN_AMOUNT>
            <TOTAL_AMOUNT>100000</TOTAL_AMOUNT>
            <TXN_DESCUI>Withdrawal By Instruments (Internal FT)</TXN_DESCUI>
          </Txn-Profile>
        </Cust-Account-Full>
        <FCUBS_WARNING_RESP>
          <WARNING>
            <WCODE>ST-SAVE-023</WCODE>
            <WDESC>Record Successfully Retrieved</WDESC>
          </WARNING>
        </FCUBS_WARNING_RESP>
      </FCUBS_BODY>
    </QUERYCUSTACC_IOFS_RES>
  </S:Body>
</S:Envelope>

My code is:

public static void Main(string[] args)
{
    XmlDocument xmlRespDoc = new XmlDocument();
    xmlRespDoc.LoadXml(@"D:\xmlData.xml");

    XmlNodeList xList = xmlRespDoc.SelectNodes("/FCUBS_BODY/Cust-Account-Full/Txn-Profile");

    if (xList != null)
        foreach (XmlNode node in xList)
        {
            Console.WriteLine(node.InnerXml);
        }

    Console.ReadLine();
}

OUTPUT:

<?xml version='1.0' encoding='UTF-8'?>
<Cust-Account-Full>
  <Txn-Profile>
    <TXN_CODE>CHD</TXN_CODE>
    <NO_OF_TXN>5</NO_OF_TXN>
    <MAX_TXN_AMOUNT>100000</MAX_TXN_AMOUNT>
    <TOTAL_AMOUNT>150000</TOTAL_AMOUNT>
    <TXN_DESCUI>Cash Deposit1</TXN_DESCUI>
  </Txn-Profile>
  <Txn-Profile>
    <TXN_CODE>CHW</TXN_CODE>
    <NO_OF_TXN>8</NO_OF_TXN>
    <MAX_TXN_AMOUNT>150000</MAX_TXN_AMOUNT>
    <TOTAL_AMOUNT>200000</TOTAL_AMOUNT>
    <TXN_DESCUI>Cash Withdrawal1</TXN_DESCUI>
  </Txn-Profile>
  <Txn-Profile>
    <TXN_CODE>DCL</TXN_CODE>
    <NO_OF_TXN>5</NO_OF_TXN>
    <MAX_TXN_AMOUNT>100000</MAX_TXN_AMOUNT>
    <TOTAL_AMOUNT>200000</TOTAL_AMOUNT>
    <TXN_DESCUI>Deposit By Instruments (Clearing)</TXN_DESCUI>
  </Txn-Profile>
  <Txn-Profile>
    <TXN_CODE>DFR</TXN_CODE>
    <NO_OF_TXN>1</NO_OF_TXN>
    <MAX_TXN_AMOUNT>100000</MAX_TXN_AMOUNT>
    <TOTAL_AMOUNT>100000</TOTAL_AMOUNT>
    <TXN_DESCUI>Deposit Of Foreign Remittance </TXN_DESCUI>
  </Txn-Profile>
  <Txn-Profile>
    <TXN_CODE>DFT</TXN_CODE>
    <NO_OF_TXN>5</NO_OF_TXN>
    <MAX_TXN_AMOUNT>100000</MAX_TXN_AMOUNT>
    <TOTAL_AMOUNT>200000</TOTAL_AMOUNT>
    <TXN_DESCUI>Deposit By Instruments (Internal FT)</TXN_DESCUI>
  </Txn-Profile>
  <Txn-Profile>
    <TXN_CODE>WCL</TXN_CODE>
    <NO_OF_TXN>5</NO_OF_TXN>
    <MAX_TXN_AMOUNT>80000</MAX_TXN_AMOUNT>
    <TOTAL_AMOUNT>100000</TOTAL_AMOUNT>
    <TXN_DESCUI>Withdrawal By Instruments (Clearing)</TXN_DESCUI>
  </Txn-Profile>
  <Txn-Profile>
    <TXN_CODE>WFT</TXN_CODE>
    <NO_OF_TXN>5</NO_OF_TXN>
    <MAX_TXN_AMOUNT>50000</MAX_TXN_AMOUNT>
    <TOTAL_AMOUNT>100000</TOTAL_AMOUNT>
    <TXN_DESCUI>Withdrawal By Instruments (Internal FT)</TXN_DESCUI>
  </Txn-Profile>
</Cust-Account-Full>

You can use LINQ to XML in this manner:

var profiles = XElement.Load(new StreamReader(xmlFileStream)).Descendants("Txn-Profile");

where xmlFileStream is the FileStream of the xml.

You can get it via elements tag name like this:

 XmlNodeList xList = xmlRespDoc.GetElementsByTagName("Cust-Account-Full");

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