Silverlight WP7应用程序中关于XML的If语句的语法

时间:2010-11-17 03:48:33

标签: c# xml silverlight visual-studio-2010 windows-phone-7

大家好!我找不到解释正确编码方式的教程。我认为从标题和代码中可以清楚地知道我正在尝试做什么。我收到的两个错误是我的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 :(得分:0)

如果没有返回可以分配给var箭头的结果。

你试图做这样的事情?

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

答案 1 :(得分:0)

我不清楚你要做什么。如果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;

修改

为什么你在foreach循环中再次设置DATABASEinfoList.ItemsSource = list并再次在外面?内部应该可以消失。

此外,还有一个固有的问题,你在Mick的答案中的评论显示..这些电话:

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

假设元素存在。如果没有,你将在null上调用Value Property getter,抛出NullReferenceException。如果元素有可能为null,那么在调用Value之前需要检查它:

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

答案 2 :(得分:0)

该行

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

实际应该是

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

您应该查询,而不是 xmlitem

如其他答案中所述,您还应该在访问其值之前检查元素是否存在。