LINQ to XML 使用 Lambda 语法填充对象集合
LINQ to XML using Lambda syntax to populate object collection
我正在尝试使用带有 lambda 语法的 LINQ 从 XML 片段加载对象列表,但在创建新对象时我遇到了 lambda 语法问题。
这是将保存数据的自定义 class:
public class PhysicianInfoModel
{
string FirstName;
string LastName;
string Degree;
}
这是示例 XML 我正在尝试从以下位置加载对象集合:
<response>
<control>
<status>success</status>
<dtdversion>3.0</dtdversion>
</control>
<operation>
<authentication>
<status>success</status>
<userid>jsmith</userid>
</authentication>
<result>
<status>success</status>
<physicianlist>
<physician>
<lastname degree="MD">Smith</lastname>
<firstname>Paul</firstname>
</physician>
<physician>
<lastname degree="DO">Smith</lastname>
<firstname>Paul</firstname>
</physician>
</physicianlist>
</result>
</operation>
</response>
我试过使用如下代码,但我知道它是不正确的,因为甚至 Visual Studio 中的 intellisense 都在运行 "red squiggly line"。在此示例中,xml
是一个 XDocument
对象,它已加载上面列出的 XML。
List<PhysicianInfoModel> nodeList = xml.Descendants("physicianlist")
.Descendants("physician")
.Select(x => new PhysicianInfoModel()
{
FirstName = x.?????,
LastName = x.????,
Degree = x.Attribute("degree") // Not working
});
x
在 Select()
的上下文中引用了单个 physician
元素,因此您无法直接从 x
获取 degree
属性。您需要先获取子 lastname
元素:
List<PhysicianInfoModel> nodeList =
xml.Descendants("physicianlist")
.Descendants("physician")
.Select(x => new PhysicianInfoModel()
{
FirstName = (string)x.Element("firstname"),
LastName = (string)x.Element("lastname"),
Degree = (string)x.Element("lastname").Attribute("degree")
})
.ToList();
此外,所有 "red squiggly line" 都是 可能 因为 3 个字段的可见性是 private
(default visibility) so it won't be accessible from outside of the class PhysicianInfoModel
,虽然我不确定是否是这种情况,因为您没有 post 实际的错误消息。
我正在尝试使用带有 lambda 语法的 LINQ 从 XML 片段加载对象列表,但在创建新对象时我遇到了 lambda 语法问题。
这是将保存数据的自定义 class:
public class PhysicianInfoModel
{
string FirstName;
string LastName;
string Degree;
}
这是示例 XML 我正在尝试从以下位置加载对象集合:
<response>
<control>
<status>success</status>
<dtdversion>3.0</dtdversion>
</control>
<operation>
<authentication>
<status>success</status>
<userid>jsmith</userid>
</authentication>
<result>
<status>success</status>
<physicianlist>
<physician>
<lastname degree="MD">Smith</lastname>
<firstname>Paul</firstname>
</physician>
<physician>
<lastname degree="DO">Smith</lastname>
<firstname>Paul</firstname>
</physician>
</physicianlist>
</result>
</operation>
</response>
我试过使用如下代码,但我知道它是不正确的,因为甚至 Visual Studio 中的 intellisense 都在运行 "red squiggly line"。在此示例中,xml
是一个 XDocument
对象,它已加载上面列出的 XML。
List<PhysicianInfoModel> nodeList = xml.Descendants("physicianlist")
.Descendants("physician")
.Select(x => new PhysicianInfoModel()
{
FirstName = x.?????,
LastName = x.????,
Degree = x.Attribute("degree") // Not working
});
x
在 Select()
的上下文中引用了单个 physician
元素,因此您无法直接从 x
获取 degree
属性。您需要先获取子 lastname
元素:
List<PhysicianInfoModel> nodeList =
xml.Descendants("physicianlist")
.Descendants("physician")
.Select(x => new PhysicianInfoModel()
{
FirstName = (string)x.Element("firstname"),
LastName = (string)x.Element("lastname"),
Degree = (string)x.Element("lastname").Attribute("degree")
})
.ToList();
此外,所有 "red squiggly line" 都是 可能 因为 3 个字段的可见性是 private
(default visibility) so it won't be accessible from outside of the class PhysicianInfoModel
,虽然我不确定是否是这种情况,因为您没有 post 实际的错误消息。