gpt4 book ai didi

c# - LINQ to XML 简单查询

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:51 24 4
gpt4 key购买 nike

我有一个这样的 XML 文档:

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

我想编写一个返回“Person”ID 和所有“Fields”元素的 XML 查询。我可以获得所有“Fields”元素,但不能获取“Person”ID。当我需要“状态”元素时,这同样适用。

我们将不胜感激。

最佳答案

尝试这样的事情:

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; }
}

我使用 Descendants 方法检索字段的原因是因为我首先使用的元素是 Person 元素。由于 Elements 仅返回直接子节点,因此无法检索字段,因此我改用了 Descendants

要枚举结果,您可以这样做:

foreach (var person in result)
{
Console.WriteLine("Person Id: {0}", person.Id);
foreach (var field in person.Fields)
{
Console.Write(" Field Id: {0}", field.Id);
Console.WriteLine(" Field Value: {0}", field.Value);
}
}

关于c# - LINQ to XML 简单查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2646717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com