C# C在XML文件中查找特定数据
我是一名代码初学者,我正在寻求XML文件的帮助,我做了一个项目来显示食物菜单和创建随机菜单,开胃菜、主菜和甜点将在不同的XML文件中,我的问题是我从来没有处理过XML文件,所以我很糟糕 实际上,我的软件看起来是这样的:它是法语的,但标签是开胃菜、主菜和甜点,然后,选择随机菜单 因此,我的软件需要这样工作: 第一个组合框用于显示所有名称,因此它从XML中获取每个初学者的名称,并将其显示在组合框中。我真的那样做了 然后,当我在组合框中选择初学者时,软件需要在XML中找到描述和配方,并在我的屏幕截图上的listboxlike中显示,我需要这样做 我的XML文件的使用方式:C# C在XML文件中查找特定数据,c#,xml,C#,Xml,我是一名代码初学者,我正在寻求XML文件的帮助,我做了一个项目来显示食物菜单和创建随机菜单,开胃菜、主菜和甜点将在不同的XML文件中,我的问题是我从来没有处理过XML文件,所以我很糟糕 实际上,我的软件看起来是这样的:它是法语的,但标签是开胃菜、主菜和甜点,然后,选择随机菜单 因此,我的软件需要这样工作: 第一个组合框用于显示所有名称,因此它从XML中获取每个初学者的名称,并将其显示在组合框中。我真的那样做了 然后,当我在组合框中选择初学者时,软件需要在XML中找到描述和配方,并在我的屏幕截图上
<?xml version="1.0" encoding="utf-8" ?>
<xmlentrees>
<entrees>
<entree>
<Nomentree>STARTER NAME</Nomentree>
<descentree>STARTER DESC.</descentree>
<recette>
AND
THERE
THE
RECIPE
</recette>
</entree>
<entree>
<Nomentree>STARTER NAME</Nomentree>
<descentree>STARTER DESC.</descentree>
<recette>
AND
THERE
THE
RECIPE
</recette>
</entree>
</entrees>
</xmlentrees>
这是我的c代码
#region entree
const string XMLENTREES = @"c:\temp\entree.xml"; // i pasted the xml file in temp cuz if he's in my resources, i can't load it
private List<string> names;
private Dictionary<string, string> dict;
private List<Entree> entrees;
private void xmlentree()
{
XDocument doc = XDocument.Load(XMLENTREES);
entrees = doc.Descendants("entree").Select(x => new Entree()
{
nomentree = (string)x.Element("Nomentree"),
descentree = (string)x.Element("descentree"),
recette = (string)x.Element("recette")
}).ToList();
dict = entrees.GroupBy(x => x.nomentree, y => y)
.ToDictionary(x => x.Key, y => y.ToList());
names = dict.Select(x => x.Key).ToList(); // MY LIST OF STARTERS NAMES
object[] array = names.ToArray<object>();
comboBox1.Items.AddRange(array);
}
public class Entree
{
public string nomentree { get; set; }
public string descentree { get; set; }
public string recetteentree { get; set; }
public string recette { get; set; }
}
#endregion entree
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (names.Contains(comboBox1.SelectedItem.ToString())) //HERE I CAN CHECK IF THE NAME IN COMBO BOX MATCH WITH MY LIST OF STARTERS NAMES
{
}
}
您可以使用以下命令 创建序列化程序以将xml文件转换为基于类的数据。 将xml反序列化为XmlEnteres类对象。 根据初学者名称查找主菜 我在这里做的是打印第一个mathces开始的名字。 反序列化所需的类
如果您有xml文件,但不确定类应该如何编写,请使用site将xml自动转换为类。向类中添加打印方法:
public class Entree
{
public string nomentree { get; set; }
public string descentree { get; set; }
public string recetteentree { get; set; }
public string recette { get; set; }
public string Print(Entree entree)
{
return string.Format("Norm : {0}\nDescription : {1}\n Recette : {2}",
entree.nomentree, entree.descentree, entree.recetteentree);
}
}
您可以使用LINQ to XML查询XML,并提取所需的字段:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (names.Contains(comboBox1.SelectedItem.ToString())) //HERE I CAN CHECK IF THE NAME IN COMBO BOX MATCH WITH MY LIST OF STARTERS NAMES
{
XElement entreeXml = XElement.Load(@"c:\temp\entree.xml");
var query = (from x in entreeXml.Element("entrees").Elements("entree")
where (string)x.Element("Nomentree") == comboBox1.SelectedItem.ToString()
select new
{
Description = (string)x.Element("descentree"),
Recipe = (string)x.Element("recette")
}).SingleOrDefault();
if (query != null)
{
// Set listbox values to query.Description and query.Recipe
}
}
}
您好,谢谢您的回答,我的问题解决了,效果很好
Jawad,关于XML2CSharp,我不知道,但我下次需要使用XML时会使用它,谢谢分享
public class Entree
{
public string nomentree { get; set; }
public string descentree { get; set; }
public string recetteentree { get; set; }
public string recette { get; set; }
public string Print(Entree entree)
{
return string.Format("Norm : {0}\nDescription : {1}\n Recette : {2}",
entree.nomentree, entree.descentree, entree.recetteentree);
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (names.Contains(comboBox1.SelectedItem.ToString())) //HERE I CAN CHECK IF THE NAME IN COMBO BOX MATCH WITH MY LIST OF STARTERS NAMES
{
XElement entreeXml = XElement.Load(@"c:\temp\entree.xml");
var query = (from x in entreeXml.Element("entrees").Elements("entree")
where (string)x.Element("Nomentree") == comboBox1.SelectedItem.ToString()
select new
{
Description = (string)x.Element("descentree"),
Recipe = (string)x.Element("recette")
}).SingleOrDefault();
if (query != null)
{
// Set listbox values to query.Description and query.Recipe
}
}
}