【发布时间】:2020-12-11 16:36:22
【问题描述】:
我无法从以下 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>
【问题讨论】:
-
原因很简单:您完全忽略已定义的 XML 命名空间 - 请参阅此处:
<S:Envelope xmlns:S='http://schemas.xmlsoap.org/soap/envelope/'>- 声明了一个 XML 命名空间并且used - 您需要尊重这一点,并在从该 XML 中选择时使用它!
标签: c# xml-parsing