2010-05-24 23 views
1

我想圍繞使用LINQ作爲使用XML數據的一種手段來繞過我的大腦,並且我有一個問題找出將元素選入強類型集合的最佳方法。我敢肯定,我錯過了一些細節,但我似乎無法看到它。如何使用LINQ將XML元素選擇到強類型集合中?

這裏是我的XML文件的樣本:

<users> 
     <User> 
     <UserId>a3ba555e-9dbe-4f5e-a8b0-56be91a99eae</UserId> 
     <Password>FCC2427123934BC2A06297847574A50E</Password> 
     <Username>TestTEst</Username> 
     <FirstName>Test</FirstName> 
     <LastName>TestTEst</LastName> 
     </User> 
     <User> 
     <UserId>500629d5-c22a-4585-bc85-330391f44fac</UserId> 
     <Password>FCC2427123934BC2A06297847574A50E</Password> 
     <Username>TestTEst</Username> 
     <FirstName>Test</FirstName> 
     <LastName>TestTEst</LastName> 
     </User> 
     <User> 
     <UserId>bd6b78db-9cd7-403b-a757-a8c013bdc523</UserId> 
     <Password>FCC2427123934BC2A06297847574A50E</Password> 
     <Username>TestTEst</Username> 
     <FirstName>Test</FirstName> 
     <LastName>TestTEst</LastName> 
     </User> 
</users> 

當我創建使用下面的代碼的對象:

Dim userList = From u In users.Descendants("user") _ 
       Select u 

然後用戶列表將包含我的XML文件中的元素。如果我嘗試將XML文件選擇爲強類型集合,請改爲:

Dim userList = (From u In users.Descendants("user") _ 
       Select New User With { _ 
        .UserId = New Guid(u.Attribute("UserId").Value), _ 
        .Username = u.Attribute("Username").Value, _ 
        .Password = u.Attribute("Password").Value, _ 
        .FirstName = u.Attribute("FirstName").Value, _ 
        .LastName = u.Attribute("LastName").Value _ 
       }).ToList() 

然後,userList爲空。無論我是否明確指定了userList(List(Of User))的類型,這都是一樣的。我究竟做錯了什麼?直接從XML創建強類型集合的正確方法是什麼?

感謝,

邁克

+0

我很驚訝,這可以工作。 XML區分大小寫。它應該是'.Descendants(「User」)'。 – 2010-05-24 20:42:00

+0

就這樣,這是問題:)。它正在尋找用戶而不是用戶。只要我將其更改爲「用戶」(使用Descendants屬性),它就很好。 – mclark1129 2010-05-24 20:54:18

回答

2

我覺得這裏的問題是,「用戶名」,「用戶名」,「密碼」等,都不是用戶標記的屬性,它們是子元素。可能想試試這個:

Dim userList = (From u In users.Descendants("user") _ 
       Select New User With { _ 
        .UserId = New Guid(u.Decendants("UserId").First().Value), _ 
        .Username = u.Decendants("Username").First().Value, _ 
        .Password = u.Decendants("Password").First().Value, _ 
        .FirstName = u.Decendants("FirstName").First().Value, _ 
        .LastName = u.Decendants("LastName").First().Value _ 
       }).ToList() 
+0

我嘗試使用後代有和沒有.First()並得到相同的結果。 – mclark1129 2010-05-24 20:52:32

+0

如上所述,主要問題是「用戶」應該是「用戶」,因爲這是XML文件中元素的外殼。 – mclark1129 2010-05-24 20:55:03