【发布时间】:2019-01-05 09:31:20
【问题描述】:
我有一个看起来像这样的 .XML 文件(我通过 C# 中的 JSON 的 xml 序列化得到这个,这正是我想要的):
<?xml version="1.0" encoding="utf-8"?>
<HistoricalInstruments xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<id>12345678</id>
<context>My Context<context/>
<historical_data>
<HistroicalData>
<operating_mic>WWW</operating_mic>
<mic>WWW</mic>
<isin>NO1234567</isin>
<feed>18888</feed>
<ticker>ddd</ticker>
<name>ddd</name>
<prev_close_date>0001-01-01T00:00:00</prev_close_date>
<prev_close>0</prev_close>
<volume>0</volume>
<turnover>0</turnover>
<bid>0</bid>
<ask>0</ask>
<currency>CHF</currency>
<error_code>0</error_code>
<historical_trades>
<HistoricalTrades>
<last>139.8</last>
<date>2017-01-13T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>133.1</last>
<date>2017-01-16T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>131.5</last>
<date>2017-01-17T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>133.8</last>
<date>2017-01-18T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>135.5</last>
<date>2017-01-19T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>135.8</last>
<date>2017-01-20T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>135.4</last>
<date>2017-01-23T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>135.9</last>
<date>2017-01-24T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>139</last>
<date>2017-01-25T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>139.9</last>
<date>2017-01-26T00:00:00</date>
</HistoricalTrades>
</historical_trades>
</HistroicalData>
.... list continues/this is just example I have a list of HistroicalData too
</historical_data>
</HistoricalInstruments>
正如您在主 HistoricalData 节点中看到的,我还有另一个对象列表:
<historical_trades>
<HistoricalTrades>
<last>139.8</last>
<date>2017-01-13T00:00:00</date>
</HistoricalTrades>
<HistoricalTrades>
<last>133.1</last>
<date>2017-01-16T00:00:00</date>
</HistoricalTrades>
</HistroicalData>
...
</historical_data>
</HistoricalInstruments>
/ 由于这都在主节点history_data/HistroicalData内,所以在循环节点列表时我想得到这样的输出(只是原始示例):
{operating_mic: WWW
mic: WWW
isin: NO1234567
feed: 18888
ticker: ddd
currency: CHF
last: 139.8}
--> 这是历史交易中的第一个“last”值!**
{operating_mic: WWW
mic: WWW
isin: NO1234567
feed: 18888
ticker: ddd
currency: CHF
last: 133.1}
--> 这里是历史交易中“最后一个”的 SECOND 值,所有其他属性都相同!
我试过用这个但是没用:
XDoc.LoadXml(histPricesFormatted);
XmlNodeList PriceNodes = XDoc.SelectNodes("//historical_data/HistroicalData");
SecurityPrice price = new SecurityPrice(xmlDoc);
if (PriceNodes.Count == 0)
{
return;
}
else
{
foreach (XmlNode xn in PriceNodes)
{
if (xn["historical_trades"]!= null)
{
XmlNodeList histTradeNode = xn["historical_trades"].SelectNodes("//historical_trades/HistoricalTrades");
foreach (XmlNode trade in histTradeNode)
{
if (xn["ticker"] != null) price.ID = xn["ticker"].InnerText;
if (xn["currency"] != null) price.Currency = xn["currency"].InnerText;
if (xn["isin"] != null) price.ISIN = xn["isin"].InnerText;
if (trade["last"] != null) price.Price = double.Parse(xn["last"].InnerText);
if (xn["error_description"] != null) price.Notes = xn["error_description"].InnerText;
}
}
}
有人知道我哪里错了吗?
【问题讨论】:
-
请解释你的意思是它没有工作。有例外吗?如果有,在哪一行?定义行为,它会更容易提供帮助。
标签: c# asp.net .net xml xmlnode