2010-05-24 56 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