检索Xml相同的节点C#

问题描述

我无法从以下XML文件获取相同的XML节点。我不明白为什么这样的代码

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

返回NULL。我想做的是,检索所有相同的节点<Txn-Profile>并放入字符串数组或列表中。我想我在这里缺少一些东西来检索我想要的输出

请提出建议。

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>

我的代码是:

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

输出

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

解决方法

您可以通过以下方式使用 LINQ to XML

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

其中xmlFileStream是xml的 FileStream

,

您可以通过以下元素标签名称来获取它:

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