把xml放到Array中

时间:2014-01-11 23:59:55

标签: c# xml xml-parsing linq-to-xml xml-deserialization

我有一个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;

虽然我显然不需要这种语法,但这是我正在努力实现的功能。

2 个答案:

答案 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");

如您所知,每个餐厅的第一个和第二个元素是名称和位置,我认为现在可以轻松访问它们。