我需要从XML分组“Document”值。问题是因为键值(productType)可以是多个。
这是XML:
<Documents>
<Document>
<id>1</id>
<title>title1</title>
<productTypes>
<productType id="x1">Capital Costs Analysis Forum - Brazil</productType>
<productType id="x3">Environmental, Health and Safety & Sustainability</productType>
</productTypes>
</Document>
<Document>
<id>2</id>
<title>title2</title>
<productTypes>
<productType id="x1">Capital Costs Analysis Forum - Brazil</productType>
</productTypes>
</Document>
<Document>
<id>3</id>
<title>title3</title>
<productTypes>
<productType id="x3">Environmental, Health and Safety & Sustainability</productType>
</productTypes>
</Document>
<Document>
<id>4</id>
<title>title4</title>
<productTypes>
<productType id="x2">Defense, Risk & Security</productType>
</productTypes>
</Document>
这就是我的尝试:
var documents = from document in some.Descendants("Document")
group document by (string)document
.Element("productTypes")
.Elements("productType")
.First() into docGroup
select docGroup;
只有有一个productType元素,我的代码才有效。如果productType有多个值,如何更改我的代码?
答案 0 :(得分:2)
您没有解释您想要的结果,但我怀疑您需要以下分组:
var documentGroups =
from document in XDocument.Load("input.xml").Descendants("Document")
from productType in document.Element("productTypes").Elements("productType")
group document by (string)productType.Attribute("id");
foreach (var documentGroup in documentGroups)
{
Console.WriteLine("Group {0} has the following members:", documentGroup.Key);
foreach (XElement document in documentGroup)
{
Console.WriteLine("\t{0}", (string)document.Element("title"));
}
Console.WriteLine();
}
输入为
<Documents>
<Document>
<id>1</id>
<title>title1</title>
<productTypes>
<productType id="x1">Capital Costs Analysis Forum - Brazil</productType>
<productType id="x3">Environmental, Health and Safety & Sustainability</productType>
</productTypes>
</Document>
<Document>
<id>2</id>
<title>title2</title>
<productTypes>
<productType id="x1">Capital Costs Analysis Forum - Brazil</productType>
</productTypes>
</Document>
<Document>
<id>3</id>
<title>title3</title>
<productTypes>
<productType id="x3">Environmental, Health and Safety & Sustainability</productType>
</productTypes>
</Document>
<Document>
<id>4</id>
<title>title4</title>
<productTypes>
<productType id="x2">Defense, Risk & Security</productType>
</productTypes>
</Document>
</Documents>
输出
Group x1 has the following members:
title1
title2
Group x3 has the following members:
title1
title3
Group x2 has the following members:
title4