0

假设我将此 XML 作为字符串:

<calles>
  <calle>
   <nombre>CALLAO AV.</nombre>
   <altura>1500</altura>
   <longitud>-58.3918617027</longitud>
   <latitud>-34.5916734896</latitud>
   <barrio>Recoleta</barrio>
  </calle>
 </calles>

并拥有我创建的这个类型来映射该 XML:

public class Ubicacion
{
    public string Latitud { get; set; }
    public string Longitud { get; set; }
    public string Nombre { get; set; }
    public string Altura { get; set; }
    public string Barrio { get; set; }

    public Ubicacion() { }
}

我需要获取该 XML 文件并使用这些值创建一个对象...

有人知道快速的方法吗?用 C#?我一直在尝试这个,但根本没有工作......

XElement dir = XElement.Parse(text);

Ubicacion informacion = from d in dir.Elements("calle").
        select new Ubicacion
        {
           Longitud = d.Element("longitud").Value,
           Latitud = d.Element("latitud").Value,
           Altura = d.Element("altura").Value,
           Nombre = d.Element("nombre").Value,
           Barrio = d.Element("barrio").Value,
        };
return informacion.Cast<Ubicacion>();

有任何想法吗?

4

2 回答 2

5

你试过这个吗?

 XElement dir = XElement.Parse(text); 

        var informacion = from d in dir.Elements("calle"). 
                          select new Ubicacion 
                          { 
                              Longitud = d.Element("longitud").Value, 
                              Latitud = d.Element("latitud").Value, 
                              Altura = d.Element("altura").Value, 
                              Nombre = d.Element("nombre").Value, 
                              Barrio = d.Element("barrio").Value, 
                          }.ToList();

请记住,在您遍历它之前不会执行 LINQ 查询。.ToList()扩展方法将为您做到这一点。然后它将产生一个List<Ubicacion>集合。

于 2010-04-16T16:56:10.247 回答
3

一种方法是:

  • 运行您的 data.xmlxsd.exe两次 - 首先使用xsd.exe (filename).xml它将为您的 XML 文件生成一个 XML 模式,具有相同的名称和.xsd文件扩展名
  • 其次,运行xsd.exe /c (filename).xsd它将生成一个与您的 XML 对应的 C# 类
  • 现在,您可以轻松地将 XML 反序列化为 C# 类
  • 设置AutoMapper以轻松地将生成/反序列化的类映射到目标类型的实例 - 因为两种类型具有相同的属性名称,所以设置 AutoMapper 轻而易举:

    Mapper.CreateMap<Deserialized, Ubicacion>();
    Ubicacion target = Mapper.Map<Deserialized, Ubicacion>(your-deserialized-instance);
    

    这就是所有要做的!

根据您需要执行此操作的次数,这可能比手动将 XML 解析成点点滴滴并基于该解析组装新对象实例更简单。

于 2010-04-16T18:30:03.657 回答