Я новичок в синтаксическом анализе XML, и я начал изучать linq, который, на мой взгляд, может быть лучшим решением здесь. Я получаю следующее сообщение от сервера:
<?xml version="1.0" encoding="utf-16"?>
<events>
<header>
<seq>0</seq>
</header>
<body>
<orderBookStatus>
<id>100093</id>
<status>Opened</status>
</orderBookStatus>
<orderBook>
<instrumentId>100093</instrumentId>
<bids>
<pricePoint>
<price>1357.1</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1357.0</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1356.9</price>
<quantity>71</quantity>
</pricePoint>
<pricePoint>
<price>1356.8</price>
<quantity>20</quantity>
</pricePoint>
</bids>
<offers>
<pricePoint>
<price>1357.7</price>
<quantity>51</quantity>
</pricePoint>
<pricePoint>
<price>1357.9</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1358.0</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1358.1</price>
<quantity>20</quantity>
</pricePoint>
<pricePoint>
<price>1358.2</price>
<quantity>20</quantity>
</pricePoint>
</offers>
<lastMarketClosePrice>
<price>1356.8</price>
<timestamp>2011-05-03T20:00:00</timestamp>
</lastMarketClosePrice>
<dailyHighestTradedPrice />
<dailyLowestTradedPrice />
<valuationBidPrice>1357.1</valuationBidPrice>
<valuationAskPrice>1357.7</valuationAskPrice>
<lastTradedPrice>1328.1</lastTradedPrice>
<exchangeTimestamp>1304501070802</exchangeTimestamp>
</orderBook>
</body>
</events>
Моя цель - разобрать элементы ценовой точки
<pricePoint>
<price>1358.2</price>
<quantity>20</quantity>
</pricePoint>
в словарь следующей структуры:
Dictionary<double, PriceLevel>
где цена должна быть двойной, а PriceLevel - классом
class PriceLevel
{
int bid;
int offer;
public PriceLevel(int b, int o)
{
bid = b;
offer = o;
}
}
В зависимости от элемента , в котором существует каждая ценовая точка (либо заявки, либо предложения), количество должно быть присвоено соответствующим образом, т.е. если ценовая точка существует в заявках, то количество должно быть присвоено заявке, а 0 - предложению. Напротив, если в предложениях есть указанная цена, то количество должно быть присвоено предложению, а 0 - заявке.
Я надеюсь, что мое объяснение ясно, однако, если у вас возникли проблемы с его пониманием, не стесняйтесь обращаться за разъяснениями в комментариях. Буду очень признателен за помощь в решении этой проблемы.
+++++++++++++++++++++++++++++++++++++ ++++ Обновление:
Я углубился в поток, который пытаюсь прочитать, и это будет не так просто, как я ожидал. Я обнаружил, что поток не всегда будет содержать весь документ, поэтому мне придется читать его с помощью XmlReader, чтобы обрабатывать поток на постоянной основе. В таком случае, как я могу читать заявки и предложения? У меня есть что-то вроде этого:
StreamReader sr = new StreamReader (".. \ .. \ videos.xml");
XmlReader xmlReader = XmlReader.Create(sr);
while (xmlReader.Read())
{
if (xmlReader.HasValue)
{
OnXmlValue(this, new MessageEventArgs(true, xmlReader.Value));//saxContentHandler.Content(xmlReader.Value);
}
else
{
if (xmlReader.IsEmptyElement)
{
OnStartElement(this, new MessageEventArgs(false, xmlReader.Name));
OnEndElement(this, new MessageEventArgs(false, xmlReader.Name));
}
else if (xmlReader.IsStartElement())
{
OnStartElement(this, new MessageEventArgs(false, xmlReader.Name));
}
else
{
OnEndElement(this, new MessageEventArgs(false, xmlReader.Name));
}
}
}
, но я изо всех сил пытаюсь связать имя элемента с его значением ... т.е. как я могу знать, какую цену предложения я сейчас читаю и есть ли она в заявках или предложениях? Спасибо за помощь