gpt4 book ai didi

C# LINQ - 从单个元素中检索多个属性,转换为结构化(非 xml)文本

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

我有一个包含属性组和属性的 XML 文件。我想检索属性组,从该元素打印 Name 属性,然后在该条目下方打印所述属性组的子属性。

示例 XML 文件:

  <?xml version="1.0" ?> 
<XMLDocument xmlns:ns="http://www.namespace.com/ns">
<ns:collectionProperties>
<ns:propertyGroup name="PERSON">
<ns:property key="ID" value="555"/>
<ns:property key="Name" value="Ehron"/>
<ns:property key="Location" value="Atlanta"/>
</ns:propertyGroup>
<ns:propertyGroup name="DOG">
<ns:property key="Dog Name" value="Lenny"/>
<ns:property key="Dog Breed" value="Corgle"/>
</ns:propertyGroup>
<ns:propertyGroup name="CAT">
<ns:property key="Cat Color" value="Grey"/>
<ns:property key="Cat Hates" value="Everyone"/>
<ns:property key="Name" value="Lester"/>
</ns:propertyGroup>
</ns:collectionProperties>
</XMLDocument>

所需的结果文本:

[PERSON]
ID=555
Name=Ehron
Location=Atlanta
[DOG]
Dog Name=Lenny
Dog Breed=Corgle
[CAT]
Cat Color=Grey
Cat Hates=Everyone
Name=Lester

我设法获得要打印的 propertyGroup 名称,但如果不执行两次 LINQ 查询,我似乎无法从属性元素中检索到多个属性。到目前为止,我还没有找到执行此操作的方法。

static void Main(string[] args)
{
XDocument xml = XDocument.Load(@"c:\xml.xml");
XNamespace ns = "http://namespace.com/ns";

// Pull out the categories
var categories = from c in xml.Descendants(ns + "propertyGroup")
select (string)c.Attribute("name");

// write categories
foreach (string name in categories)
{

Console.WriteLine('[' + name + ']');
}

}

最佳答案

这是一种使用嵌套 LINQ 通过 var 关键字组装嵌套匿名类型集合的方法。

void Main(string[] args)
{
XDocument xml = XDocument.Parse("XML CONTENTS HERE")
XNamespace ns = "http://www.namespace.com/ns";

// Pull out the property Groups
var propertyGroups =
from pg in xml.Descendants(ns + "propertyGroup")
//Return a new, anonymous object to represent the xml propertyGroup
select new
{
Name = pg.Attribute("name").Value,
//Pairs will be a collection of all properties in the group
Pairs = from p in pg.Descendants(ns + "property")
//Nested anonymous type
select new
{
Key = p.Attribute("key").Value,
Value = p.Attribute("value").Value
}
};

foreach (var propertyGroup in propertyGroups)
{
Console.WriteLine("[" + propertyGroup.Name + "]");
foreach (var pair in propertyGroup.Pairs)
{
Console.WriteLine(pair.Key + "=" + pair.Value);
}
}
}

关于C# LINQ - 从单个元素中检索多个属性,转换为结构化(非 xml)文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1890003/

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