Справка по синтаксическому анализу XML для C # - PullRequest
2 голосов
/ 09 февраля 2012

Я промочил ноги с linq to xml, и у меня есть данные в памяти, но следующий код работает без ошибок, но без добавления моих объектов в список точек данных (конец процедуры ниже).Если бы мне пришлось угадывать, я бы сказал, что что-то не так с моими запросами, не возвращая никаких узлов.Вот пример XML:

<results>
            <quote date="2012-02-07">
              <Date>2012-02-07</Date>
              <Open>44.76</Open>
              <High>44.88</High>
              <Low>44.22</Low>
              <Close>44.60</Close>
              <Volume>2547400</Volume>
              <Adj_Close>44.60</Adj_Close>
            </quote>

А вот мой linq и соответствующий код:

List<IDataPoint> dataPointList = new List<IDataPoint>();
                XDocument doc = XDocument.Load(AddressString);

var makeInfo =
                    from s in doc.Elements("quote")
                    where s.Element("Date") != null && s.Element("Open") != null
                        && s.Element("High") != null && s.Element("Low") != null
                        && s.Element("Close") != null && s.Element("Volume") != null
                        && !s.Element("Open").Value.Equals("") && !s.Element("High").Value.Equals("")
                        && !s.Element("Low").Value.Equals("") && !s.Element("Close").Value.Equals("")
                    select new DailyPricingVolDP(symbol, (DateTime)s.Element("Date"),
                        (double)s.Element("Open"),
                        (double)s.Element("High"),
                        (double)s.Element("Low"),
                        (double)s.Element("Close"),
                        (long)s.Element("Volume"));

                foreach (var item in makeInfo)
                {
                    dataPointList.Add(item);
                }

Ответы [ 3 ]

1 голос
/ 09 февраля 2012

Я почти уверен, что XDocument.Elements () возвращает только прямые дочерние элементы, и, основываясь на вашем XML-документе, элементы ("цитата") не будут ничего совпадать. Используйте XDocument.Decendants ().

т.е. doc.Descendants ( "цитата")

0 голосов
/ 09 февраля 2012

Я получил его самостоятельно, но спасибо за быструю помощь ...

doc.Elements("quote")

должно быть:

doc.Descendants("quote")

и работает как положено. Еще раз спасибо ..

0 голосов
/ 09 февраля 2012

Попробуйте

var makeInfo = 
                    from s in doc.Element("result").Elements("quote") 
                    where s.Element("Date") != null && s.Element("Open") != null 
                        && s.Element("High") != null && s.Element("Low") != null 
                        && s.Element("Close") != null && s.Element("Volume") != null 
                        && !s.Element("Open").Value.Equals("") && !s.Element("High").Value.Equals("") 
                        && !s.Element("Low").Value.Equals("") && !s.Element("Close").Value.Equals("") 
                    select new DailyPricingVolDP(symbol, (DateTime)s.Element("Date"), 
                        (double)s.Element("Open"), 
                        (double)s.Element("High"), 
                        (double)s.Element("Low"), 
                        (double)s.Element("Close"), 
                        (long)s.Element("Volume")); 

Я бы также рекомендовал написать, например, s.Element("Open").Value != string.Empty вместо !s.Element("Open").Value.Equals(""), но это стилистическая вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...