Синтаксис оператора If в отношении XML в приложении Silverlight WP7 - PullRequest
0 голосов
/ 17 ноября 2010

все!Я не мог найти учебник, объясняющий правильный способ кодирования этого.Думаю, из названия и кода будет понятно, что я пытаюсь сделать.Две ошибки, которые я получаю, состоят в том, что мой оператор if находится не в том месте, а переменная Arrow назначена, но никогда не используется.Я знаю, что это сводится к простому синтаксису, поэтому я благодарю всех за их время.

void DATABASEinfo_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error != null)
            return;

        XElement xmlitem = XElement.Parse(e.Result);

        var list = new List<DATABASEinfoViewModel>();            


        foreach (XElement item in xmlitem.Element("channel").Elements("item"))
        {
            var title = item.Element("title");
            var titlevalue = (title == null) ? null : title.Value;
            var description = item.Element("description");
            var descriptionvalue = (description == null) ? null : description.Value;                
            var arrow = (xmlitem.Element("title").Value.Contains("DATABASE Up"))
                ? "up" : null;


            list.Add(new DATABASEinfoViewModel
            {
                Title = titlevalue,
                Description = descriptionvalue,
                Arrow = arrow,                   
            });
        }                       

        DATABASEinfoList.ItemsSource = list;           
    }          

    public class DATABASEinfoViewModel
    {
        public string Title { get; set; }
        public string Description { get; set; }
        public string Arrow { get; set; } 

Странно, если я изменю:

var arrow = (xmlitem.Element("title").Value.Contains("DATABASE Up"))

На:

var arrow = (xmlitem.Element("channel").Value.Contains("DATABASE Up"))

Отображает «вверх» для всех записей.Вот пример файла XML:

<rss version="2.0">
<channel>
<title> DATABASE Status</title>
<description>DATABASE status updates</description>      

<item>
<title>First status is DATABASE Up</title>
<description>First Content</description>
</item>

<item>
<title>Second status is DATABASE Up</title>
<description>Second Content</description>
</item>

</channel>

Ответы [ 3 ]

0 голосов
/ 17 ноября 2010

Мне не совсем понятно, что вы пытаетесь сделать. Если description содержит «DATABASE Up», вы хотите, чтобы значение arrow было «up», иначе что? пустой

string arrow = null;

if (xmlitem.Element("description").Value.Contains("DATABASE Up")) 
{ 
    arrow = ("up");                 
}                 

или

var arrow = (xmlitem.Element("description").Value.Contains("DATABASE Up"))
            ? "up" : null;

EDIT

А почему вы устанавливаете DATABASEinfoList.ItemsSource = list как внутри цикла foreach, так и снова снаружи? Тот, что внутри, вероятно, должен уйти.

Кроме того, существует внутренняя проблема, показанная вашим комментарием в ответе Мика. Эти звонки:

 item.Element("[elementName]").Value

предположим, что элемент существует. Если этого не произойдет, вы вызовете Value Property get для NULL, выбрасывая NullReferenceException. Если есть вероятность, что элемент будет нулевым, вам нужно проверить это перед вызовом Value:

 var element = item.Element("[elementName]");
 var value = (element == null) ? null : element.Value;
0 голосов
/ 17 ноября 2010

Строка

var arrow = (xmlitem.Element("title").Value.Contains("DATABASE Up")) 

на самом деле должна быть

var arrow = (item.Element("title").Value.Contains("DATABASE Up")) 

Вы должны запрашивать item , а не xmlitem .

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

0 голосов
/ 17 ноября 2010

, если не возвращает результат, который можно присвоить стрелке var.

Где вы пытаетесь сделать что-то подобное?

    string arrow = "";
    if (xmlitem.Element("description").Value.Contains("DATABASE Up"))
    {
        arrow = ("up");                
    }   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...