检查DropDownList中选择的值,并根据XML值进行检查

时间:2014-09-06 02:30:17

标签: c# asp.net xml

我实际上要做的是检查我的dropDownList1中选择的值是否在我的XML文档中,如果是,则打印出它的胖内容。否则我会返回字符串“抱歉,我们找不到你的食物!”。目前我只是得到 else场景。任何帮助都会很棒

我的代码如下:

 XmlDocument xDoc = new XmlDocument();
        xDoc.Load("the xml address");

        // go through each food name (this works)
        foreach (XmlNode name in xDoc.SelectNodes("Web_Service/Food/Name")) 

        {
           //grab the string
           string foodName = name.InnerText;

           // what I'm tring to here is loop through the items in the dropdown list
           // and check it against foodName
           foreach (ListItem li in DropDownList1.Items)
           {
               if (li.Value == foodName)
               {
                   // print the value fat value of that particular foodName
                  // address is ("Web_Service/Food/Fat")
               }
               else
               {
                   TextBox2.Text = "sorry we could not find your food!";
               }
           }

        }

希望我解释得很好,谢谢你们。

3 个答案:

答案 0 :(得分:1)

使用以下内容替换foreach循环:

string nodeSelect = String.Format("Web_Service/Food/Name[@Value='{0}']",foodName);

XmlNodeList nodes = xDoc.SelectNodes(nodeSelect);

if (nodes.Count == 0)
{

TextBox2.Text = "sorry we could not find your food!";

}

else

{

//print the value fat value of that particular foodName
// address is ("Web_Service/Food/Fat

}

答案 1 :(得分:0)

知道下拉列表选定值的属性为SelectedValue,如:

DropDownList1.SelectedValue  == foodName

我没有看到你的第二个循环的需要,因为它甚至不验证该项目是否被选中。

或者,您可以使用LINQ来获取XML中的食物项列表:

XDocument doc=XDocument.Load(Server.MapPath("the xml address"));    

var items = (from item in doc.Root.Elements("Web_Service/Food") 
select new {     
    name=c.Element("Name"),
};  

然后您可以从不同的数组函数中受益,例如:

Array.Exists(items, DropDownList1.SelectedValue)

或者使用wherelet关键字在LINQ查询中使用它作为可能的过滤器:

var items = (from item in doc.Root.Elements("Web_Service/Food") 
let name = c.Element("Name")
where DropDownList1.SelectedValue == name
select new {     
    name=name,
};  

答案 2 :(得分:0)

您可以使用XPath表达式获取具有子节点<Food>的{​​{1}}节点等于所选食物,然后获取<Name>子节点。所有在一个XPath表达式中,所以您可以完成此操作,而无需手动循环每个<Fat>节点。例如:

<Food>