2010-11-17 14 views
0

tout le monde! Je n'ai pas trouvé de tutoriel expliquant la bonne façon de coder ceci. Je pense que le titre et le code vont clairement montrer ce que j'essaie de faire. Les deux erreurs que je reçois sont que mon instruction if est au mauvais endroit, et que la variable 'Arrow' est assignée mais jamais utilisée. Je sais que cela revient à une syntaxe simple, alors je remercie tout le monde pour leur temps.Syntaxe de If Déclaration concernant XML dans Silverlight WP7 App

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; } 

Bizarrement, si je change:

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

Pour:

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

Il affiche "up" pour toutes les entrées. Voici un exemple du fichier 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> 

Répondre

0

La ligne

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

devrait effectivement être

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

Vous devriez être interroger article, pas xmlitem.

Comme mentionné dans les autres réponses, vous devez également vérifier que les éléments existent avant d'accéder à leurs valeurs.

0

si le résultat ne peut pas être affecté à la flèche var.

Où vous essayez de faire quelque chose comme ça?

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

Merci, la syntaxe était correcte. Cependant, il a ouvert une nouvelle boîte de Pandore. Le débogueur met en surbrillance la ligne "if (xmlitem.Element (" description "). Value.Contains (" DATABASE Up ")" et me donne une erreur "NullReferenceException was unshandled". – Dan

0

Ce que vous essayez de faire n'est pas entièrement clair pour moi. Si le description contient "DATABASE Up" vous voulez que la valeur de arrow soit "up" sinon quoi? nul?

string arrow = null; 

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

ou

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

EDIT

Et pourquoi vous mettez DATABASEinfoList.ItemsSource = list à la fois à l'intérieur de la boucle foreach et à nouveau à l'extérieur? Celui qui est à l'intérieur devrait probablement partir.

En outre, il y a un problème inhérent, montré par votre commentaire dans la réponse de Mick .. Ces appels:

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

supposer que l'élément existe. Si ce n'est pas le cas, vous appelez le geteur de propriété Value sur un null, en lançant une exception NullReferenceException. S'il y a une chance que l'élément serait nul, alors vous devez vérifier que avant d'appeler Valeur:

var element = item.Element("[elementName]"); 
var value = (element == null) ? null : element.Value; 
+0

J'ai mis à jour mon code au meilleur de mes connaissances en utilisant vos suggestions, mais je reçois toujours une exception NullReferenceException. Les champs de description dans le fichier XML ne contiennent pas seulement les mots "DATABASE Up", mais quelque chose comme "Le statut est DATABASE Up". Cela aurait-il un effet négatif? – Dan