我有一个xml文件,我需要能够在列表或数组中对其进行排序
XML:
<Restaurant>
<name>test</name>
<location>test</location>
</Restaurant>
<Restaurant>
<name>test2</name>
<location>test2</location>
</Restaurant>
所有的餐馆都有相同数量的字段和相同的字段名称,但是给定xml文件中<Restaurant></Restaurant>
的数量是未知的。
换句话说,我需要一个数组或列表,并且能够做到这一点:
String name = restaurantArray[0].name;
String location = restaurantArray[0].location;
虽然我显然不需要这种语法,但这是我正在努力实现的功能。
答案 0 :(得分:0)
如果您想获取餐馆的名称,Restaurant
元素是根元素的直接子元素:
string[] names = xdoc.Root.Elements("Restaurant")
.Select(r => (string)r.Element("name"))
.ToArray();
编辑:如果您正在尝试解析整个餐馆对象:
var restaurants = from r in xdoc.Root.Elements("Restaurant")
select new {
Name = (string)r.Element("name"),
Location = (string)r.Element("location")
};
用法:
foreach(var restaurant in restaurants)
{
// use restaurant.Name or restaurant.Location
}
您可以在此处创建一些Restaurant
类的实例而不是匿名对象。您也可以通过简单的restaurants.ToArray()
电话将餐馆放入阵列。
答案 1 :(得分:0)
谢尔盖的回答很清楚,但是如果你想从保存的文件中加载它,我认为这对你有帮助。 实际上,为了将XML文件加载到我使用此方法的数组,但我的数组是双Jagged数组。我使用的代码是根据您的resturant修改的:
private static resturant[][] LoadXML(string filePath)
{
//Open the XML file
System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);
// First create a xml Serializer object
System.Xml.Serialization.XmlSerializer xmlSer = new System.Xml.Serialization.XmlSerializer(typeof(resturant[][]));
resturant[][] resturant = (resturant[][])xmlSer.Deserialize(fs);
// Close the file stream
fs.Close();
return resturant ;
}
通过此功能,您可以阅读以下所有数据:
double [][] res = LoadXML(@"YOUR FILE PATH");
如您所知,每个餐厅的第一个和第二个元素是名称和位置,我认为现在可以轻松访问它们。