【发布时间】:2011-02-23 09:56:45
【问题描述】:
我正在努力思考如何使用 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 创建强类型集合的正确方法是什么?
谢谢,
迈克
【问题讨论】:
-
我很惊讶这完全有效。 XML 区分大小写。应该是
.Descendants("User")。 -
碰巧这就是问题所在:)。它正在寻找用户而不是用户。一旦我将其更改为“用户”(使用 Descendants 属性),它就工作得很好。
标签: xml linq collections