Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用LINQ将XML元素选择到强类型集合中?_Xml_Linq_Collections - Fatal编程技术网

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

如何使用LINQ将XML元素选择到强类型集合中?,xml,linq,collections,Xml,Linq,Collections,我正试图用LINQ作为处理XML数据的一种手段,但在找出将元素选择到强类型集合中的最佳方法时遇到了一个问题。我肯定我遗漏了一些细节,但我似乎看不到 以下是我的XML文件示例: <users> <User> <UserId>a3ba555e-9dbe-4f5e-a8b0-56be91a99eae</UserId> <Password>FCC2427123934BC2A0629784757

我正试图用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>
然后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创建强类型集合的正确方法是什么

谢谢


Mike

我认为您的问题在于“UserID”、“Username”、“Password”等不是用户标签的属性,而是子元素。您可能想试试这个:

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

我很惊讶这一切都能奏效。XML区分大小写。它应该是
.subjections(“User”)
。而碰巧的是,这就是问题所在:)。它在寻找用户,而不是用户。当我将其更改为“User”(使用subjects属性)时,效果非常好。我尝试使用带有和不带.First()的后代,得到了相同的结果。如上所述,主要问题是“User”应该是“User”,因为这是XML文件中元素的大小写。
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()