Frage

jeder! Ich konnte das nicht ein Tutorial erklärt, den richtigen Weg, um Code finden. Ich denke, es ist aus dem Titel klar sein wird, und der Code, was ich zu tun werde versuchen. Die beiden Fehler Ich erhalte, ist, dass meine if-Anweisung an der falschen Stelle ist, und dass die Variable ‚Pfeil‘ zugeordnet ist, aber nie benutzt. Ich weiß, dass dies auf einfache Syntax kommt, so dass ich allen für ihre Zeit danken.

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

Merkwürdig ist, dass, wenn ich ändern:

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

An:

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

Es zeigt „up“ für alle Einträge. Hier ist ein Beispiel der XML-Datei:

<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>
War es hilfreich?

Lösung

Die Zeile

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

sollte eigentlich

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

Sie sollten werden abfragt Artikel , nicht xmlitem .

Wie in anderen Antworten erwähnt, sollten Sie auch die Überprüfung, dass Elemente vorhanden sein, bevor ihre Werte zugreifen.

Andere Tipps

wenn kein Ergebnis zurück, dass Sie auf var Pfeil zuordnen können.

Wo Sie versuchen, so etwas zu tun?

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

Es ist nicht ganz zu mir klar, was Sie zu tun versuchen. Wenn die description „Datenbank“ enthält möchten Sie den Wert von arrow zu sein „up“ sonst was? null?

string arrow = null;

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

oder

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

Bearbeiten

Und warum setzen Sie DATABASEinfoList.ItemsSource = list sowohl innerhalb der foreach-Schleife wieder draußen? Das ein im Innern sollte wahrscheinlich verschwinden.

Außerdem gibt es ein inhärentes Problem, indem Sie Ihren Kommentar gezeigt in Micks Antwort .. Diese Aufrufe:

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

davon ausgehen, dass das Element vorhanden ist. Wenn es nicht erhalten Sie die Value Property Getter auf null nennen, eine Nullreferenceexception werfen. Wenn es eine Chance, dass das Element null wäre, dann müssen Sie für das überprüfen, bevor Wert Aufruf:

 var element = item.Element("[elementName]");
 var value = (element == null) ? null : element.Value;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top