-3

我有一个最大 20 mb 的 xml:

<Neighborhood>
<Code LocationID='27767' NeighborhoodName='Broadway-Times Square' Latitude='40.7586' Longitude='-73.988152'/>
<Code LocationID='27767' NeighborhoodName='Midtown East' Latitude='40.755645' Longitude='-73.967428'/>
</Neighborhood>

我想阅读 xml 并创建一个类列表。

课程如下:

public class HotelNeighbourhood
{
  public int LocationID { get; set; }
  public string NeighborhoodName { get; set; }
  public float Latitude { get; set; }
  public float Longitude { get; set; }
}

我想以最快的方式创建一个列表。提前致谢。

4

4 回答 4

1

看看这个,这会起作用,但不确定它是否是最快的方法。

于 2013-07-10T08:59:34.403 回答
0

reader = new XmlTextReader(_XMLUrlPath + "indexNeighbourhood.xml"); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "Code") { HotelNeighbourhood hotelNeighbourhood = new HotelNeighbourhood(); hotelNeighbourhood.LocationID = int.Parse(reader.GetAttribute("LocationID").ToString()); hotelNeighbourhood.NeighborhoodName = reader.GetAttribute("NeighborhoodName").ToString(); hotelNeighbourhood.Latitude = reader.GetAttribute("Latitude").ToString() != string.Empty ? float.Parse(reader.GetAttribute("Latitude").ToString()) : 0; hotelNeighbourhood.Longitude = reader.GetAttribute("Longitude").ToString() != string.Empty ? float.Parse(reader.GetAttribute("Longitude").ToString()) : 0; LstHNeighbourHood.Add(hotelNeighbourhood); } } 阅读器。关闭();读者=空;小路

于 2013-07-10T09:38:33.223 回答
0

您应该搜索XmlReader类用法。这是获得对 XML 文件的只读访问权限的最快方法,尤其是在文件很大的情况下。它一次读取一个元素,因此您无需一次加载整个文档。

您还可以检查 LINQ to XML。它对开发人员更友好,但不幸的是需要将整个 XML 加载到内存中,当文件很大时可能会导致问题。

于 2013-07-10T08:57:22.707 回答
0

这做你想要的

 var query = (from n in xml.Descendants("Code")
              select new HotelNeighbourhood()
              {
                   LocationID = Convert.ToInt32(n.Attribute("LocationID").Value),
                   NeighborhoodName = n.Attribute("NeighborhoodName").Value,
                   Longitude = float.Parse(n.Attribute("Longitude").Value),
                   Latitude = float.Parse(n.Attribute("Latitude").Value)

              }).ToList();

会给你一个List<HotelNeighborhood>

于 2013-07-10T08:59:52.090 回答