2012-02-10 4 views
0

これは私のXMLファイルの構造です。Linqのヘルプが必要です、リストにデータを追加する必要があります

<Resto> 
<ID>2</ID> 
<Name>name</Name> 
<Category>categroty</Category> 
<Places> 
    <Address> 
    <Location>loc</Location> 
    <Number>num</Number> 
    <Longitude>"empty"</Longitude> 
    <Latitude>"empty"</Latitude> 
    </Address> 
</Places> 
</Resto> 

経度と緯度は空ですが、現在は使用していません。これらは後で更新するためのものです。 そして、いくつかは、1つの以上住所たかもしれません:

<Address> 
<Location>loc</Location> 
    <Number>num</Number> 
    <Longitude>"empty"</Longitude> 
    <Latitude>"empty"</Latitude> 
    </Address> 

また、私は完全に正常に動作して、このクエリをした:

var anything = from resto in appDataXml.Descendants("Resto") 

        select new limit() 
        { 
         ID = resto.Element("ID").Value, 
         Name = resto.Element("Name").Value, 
         Categories = resto.Element("Category").Value 
        }; 

Iが制限クラスでこれらを持っている:

public string Name{get;set;} 
    public string ID { get; set; } 
    public string Categories{get;set;} 
    public List<Address> Addresses { get; set; } 

"住所"は場所と番号を取得/設定する別のクラスです。

とにかく私の質問は、どのように私はListBoxにこれらの値を追加できるように、Xmlファイルを照会し、場所と番号をアドレスリストに追加することができます。

ありがとうございます。

答えて

0
var doc = XDocument.Load("test.xml"); 
List<Address> locations = (from address in doc.Root.Element("Places").Elements("Address") 
     select new Address 
     { 
       Location = address.Element("Location").Value, 
       Number = address.Element("Number").Value, 
     }).ToList(); 

あなたがルートノード(のような<parent>)を持っていることを確認してください:

<parent> 
    <ID>1</ID> 
    <Name></Name> 
    <Category></Category> 
    <Places> 
    <Address> 
     <Location></Location> 
     <Number></Number> 
    </Address> 
    <Address> 
     <Location></Location> 
     <Number></Number> 
    </Address> 
    </Places> 
</parent> 

更新: あなたのXMLは次のようになります場合:

<Restos> 
    <Resto> 
    <ID>1</ID> 
    <Name>name</Name> 
    <Category>categroty</Category> 
    <Places> 
     <Address> 
     <Location>loc1</Location> 
     <Number>num1</Number> 
     <Longitude>"empty"</Longitude> 
     <Latitude>"empty"</Latitude> 
     </Address> 
    </Places> 
    </Resto> 
    <Resto> 
    <ID>2</ID> 
    <Name>name</Name> 
    <Category>categroty</Category> 
    <Places> 
     <Address> 
     <Location>loc2</Location> 
     <Number>num2</Number> 
     <Longitude>"empty"</Longitude> 
     <Latitude>"empty"</Latitude> 
     </Address> 
    </Places> 
    </Resto> 
</Restos> 

あなたはそれを解析するために、このコードを使用することができます:

RestoAddressは次のように定義されている
var doc = XElement.Load("test2.xml"); 
List<Resto> restos = (from resto in doc.Elements("Resto") 
         select new Resto 
         { 
          ID = resto.Element("ID").Value, 
          Name = resto.Element("Name").Value, 
          Category = resto.Element("Category").Value, 
          Addresses = (from address in resto.Element("Places").Elements("Address") 
             select new Address 
             { 
              Location = address.Element("Location").Value, 
              Number = address.Element("Number").Value, 
             }).ToList() 
         }).ToList(); 

public class Resto 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 
    public string Category { get; set; } 
    public List<Address> Addresses { get; set; } 
} 

public class Address 
{ 
    public string Location { get; set; } 
    public string Number { get; set; } 
} 
+0

Iあなたが言ったようにしましたが、私はnullReferenceExceptionを取得しました。何か案が ? – user1200204

+0

@ user1200204このコードを別の(多分もっと大きな)xmlファイルに適用していますか?より完全なxml構造で質問を更新できますか? – Meysam

+0

私はそれを更新しました。 – user1200204

関連する問題