2012-02-10 77 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 
        }; 

我有這些的限制類:

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

和「地址」是另一個類的位置和數字獲取/設置。

無論如何,我的問題是我如何查詢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> 

您可以使用此代碼來分析它:

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(); 

RestoAddress被定義爲:

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

我如你所說,但我得到了nullReferenceException。任何想法 ? – user1200204 2012-02-10 11:59:03

+0

@ user1200204您是否將此代碼應用於其他(也許更大)的xml文件?你能用更完整的xml結構來更新你的問題嗎? – Meysam 2012-02-10 12:02:21

+0

我更新了它,希望能讓事情更清楚。 – user1200204 2012-02-10 12:21:57