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

それを行う1つの方法はこれです:

  • data.xmlをxsd.exe2回実行します。最初に使用すると、同じ名前とファイル拡張子xsd.exe (filename).xmlを持つXMLファイルのXMLスキーマが生成されます。.xsd
  • 次に、xsd.exe /c (filename).xsdXMLに対応する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 に答える