C# LINQ到XML简单查询
我有这样一个XML文档:C# LINQ到XML简单查询,c#,linq-to-xml,C#,Linq To Xml,我有这样一个XML文档: <Persons> <Person Id="10000" FullName="Jon Doe"> <Status StatusID="1" StatusDesc="Active"/> <Fields> <Field FieldId="1" Value="xxxx"/> <Field FieldId="2" Value="yyyy"/>
<Persons>
<Person Id="10000" FullName="Jon Doe">
<Status StatusID="1" StatusDesc="Active"/>
<Fields>
<Field FieldId="1" Value="xxxx"/>
<Field FieldId="2" Value="yyyy"/>
<Field FieldId="2" Value="zzzz"/>
</Fields>
</Person>
<Person Id="10001" FullName="John Smith">
<Status StatusID="2" StatusDesc="New"/>
<Fields>
<Field FieldId="3" Value="aaaa"/>
<Field FieldId="4" Value="bbbb"/>
<Field FieldId="5" Value="ccccv"/>
</Fields>
</Person>
</Persons>
var result = XElement.Load("Example.xml")
.Elements("Person")
.Select(p => new {
Id = p.Attribute("Id").Value,
Fields = p.Descendants("Field").Select(f => new {
Id = f.Attribute("FieldId").Value,
Value = f.Attribute("Value").Value
})
});
class Anonymous
{
public String Id { get; }
public IEnumerable<AnonymousSubtype> Fields { get; }
}
class AnonymousSubtype
{
public String Id { get; }
public String Value { get; }
}
我想编写一个XML查询,返回“Person”ID和所有“Fields”元素。
我可以获取所有“字段”元素,但不能获取“个人”ID。
当我需要“Status”元素时,同样适用
任何帮助都将不胜感激。尝试以下方法:
<Persons>
<Person Id="10000" FullName="Jon Doe">
<Status StatusID="1" StatusDesc="Active"/>
<Fields>
<Field FieldId="1" Value="xxxx"/>
<Field FieldId="2" Value="yyyy"/>
<Field FieldId="2" Value="zzzz"/>
</Fields>
</Person>
<Person Id="10001" FullName="John Smith">
<Status StatusID="2" StatusDesc="New"/>
<Fields>
<Field FieldId="3" Value="aaaa"/>
<Field FieldId="4" Value="bbbb"/>
<Field FieldId="5" Value="ccccv"/>
</Fields>
</Person>
</Persons>
var result = XElement.Load("Example.xml")
.Elements("Person")
.Select(p => new {
Id = p.Attribute("Id").Value,
Fields = p.Descendants("Field").Select(f => new {
Id = f.Attribute("FieldId").Value,
Value = f.Attribute("Value").Value
})
});
class Anonymous
{
public String Id { get; }
public IEnumerable<AnonymousSubtype> Fields { get; }
}
class AnonymousSubtype
{
public String Id { get; }
public String Value { get; }
}
这将为您提供一系列匿名类型,如下所示:
<Persons>
<Person Id="10000" FullName="Jon Doe">
<Status StatusID="1" StatusDesc="Active"/>
<Fields>
<Field FieldId="1" Value="xxxx"/>
<Field FieldId="2" Value="yyyy"/>
<Field FieldId="2" Value="zzzz"/>
</Fields>
</Person>
<Person Id="10001" FullName="John Smith">
<Status StatusID="2" StatusDesc="New"/>
<Fields>
<Field FieldId="3" Value="aaaa"/>
<Field FieldId="4" Value="bbbb"/>
<Field FieldId="5" Value="ccccv"/>
</Fields>
</Person>
</Persons>
var result = XElement.Load("Example.xml")
.Elements("Person")
.Select(p => new {
Id = p.Attribute("Id").Value,
Fields = p.Descendants("Field").Select(f => new {
Id = f.Attribute("FieldId").Value,
Value = f.Attribute("Value").Value
})
});
class Anonymous
{
public String Id { get; }
public IEnumerable<AnonymousSubtype> Fields { get; }
}
class AnonymousSubtype
{
public String Id { get; }
public String Value { get; }
}
到目前为止你有什么代码?这正是我要找的。我试试看。。谢谢Andrew。@anon2010-我简化了一点查询-这是同一个查询,只是有一个简化的方法。Ty Andrew,“let fields”语句让我有点困惑。为什么使用p.subjects(“Field”)而不是p.Elements(“Field”)?另外,我如何预测结果???@anon2010-我更新了我的答案,而不是评论。要对很多东西发表评论!:)