如何使用LINQ将XML元素选择为强类型集合?

时间:2010-05-24 20:31:33

标签: xml linq collections

我正在尝试使用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

然后userList将包含我的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创建强类型集合的正确方法是什么?

谢谢,

麦克

1 个答案:

答案 0 :(得分:2)

我认为你的问题是“UserID”,“Username”,“Password”等不是User标签的属性,它们是子元素。可能想试试这个:

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