Вопрос

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

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>
Это было полезно?

Решение

Линия

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

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

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

Вы должны быть запрошены пункт, нет xmlitem..

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

Другие советы

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

Где вы пытаетесь сделать что-то вроде этого?

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

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

string arrow = null;

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

или

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

РЕДАКТИРОВАТЬ

И почему вы устанавливаете DATABASEinfoList.ItemsSource = list как внутри Foreach Lop и снова снаружи? Один внутри, вероятно, должен уйти.

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

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

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

 var element = item.Element("[elementName]");
 var value = (element == null) ? null : element.Value;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top