Sintaxis de Declaración Si Respecto XML en Silverlight WP7 App
-
25-09-2019 - |
Pregunta
todos! No pude encontrar un tutorial que explica la manera correcta de código de esto. Creo que va a quedar claro desde el título y el código de lo que estoy tratando de hacer. Los dos errores que estoy recibiendo es que mi declaración si está en el lugar equivocado, y que se asigna la variable 'Flecha' pero nunca utilizado. Sé que esto se reduce a la sintaxis sencilla, así que gracias a todos por su tiempo.
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; }
Curiosamente, si el cambio I:
var arrow = (xmlitem.Element("title").Value.Contains("DATABASE Up"))
Para:
var arrow = (xmlitem.Element("channel").Value.Contains("DATABASE Up"))
Se muestra "arriba" para todas las entradas. Este es un ejemplo del archivo 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>
Solución
La línea
var arrow = (xmlitem.Element("title").Value.Contains("DATABASE Up"))
debería ser en realidad
var arrow = (item.Element("title").Value.Contains("DATABASE Up"))
Debe defeto la , no xmlitem .
Como se ha mencionado en otras respuestas, también se debe comprobar que no existen elementos antes de acceder a sus valores.
Otros consejos
Si no devuelve un resultado que se puede asignar a var flecha.
Cuando se trata de hacer algo como esto?
string arrow = "";
if (xmlitem.Element("description").Value.Contains("DATABASE Up"))
{
arrow = ("up");
}
no es del todo claro para mí lo que estás tratando de hacer. Si el description
contiene "base de datos" desea que el valor de arrow
como "arriba" de otro modo, ¿qué? nula?
string arrow = null;
if (xmlitem.Element("description").Value.Contains("DATABASE Up"))
{
arrow = ("up");
}
o
var arrow = (xmlitem.Element("description").Value.Contains("DATABASE Up"))
? "up" : null;
Editar
Y por qué estás poniendo DATABASEinfoList.ItemsSource = list
tanto en el interior del bucle foreach y otra vez afuera? El uno en el interior, probablemente, debe desaparecer.
Además, no es un problema inherente, que se muestra por su comentario en la respuesta de Mick .. Estas llamadas:
item.Element("[elementName]").Value
asume que existe el elemento. Si no es así se llamará la propiedad de captador Value
en un nulo, lanzar una NullReferenceException. Si hay una posibilidad de que el elemento sería nula, entonces usted necesita para comprobar que antes de llamar Valor:
var element = item.Element("[elementName]");
var value = (element == null) ? null : element.Value;