Какой самый быстрый / самый эффективный способ чтения этого XML в словарь (Linq или что-нибудь еще?)

Я новичок в синтаксическом анализе 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));
                }
            }
        }

, но я изо всех сил пытаюсь связать имя элемента с его значением ... т.е. как я могу знать, какую цену предложения я сейчас читаю и есть ли она в заявках или предложениях? Спасибо за помощь

6
задан Macin 6 May 2011 в 23:24
поделиться