我有一个XML文件,我试图通过属性“Width”进行分组。这是一个片段:
<nodes>
<FieldType Name="1000" OriginalName="1000" ScriptName="" SqlType="12" Width="1000" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Varchar 1000" OriginalName="Varchar1000" ScriptName="" SqlType="12" Width="1000" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Varchar 10001" OriginalName="Varchar1000" ScriptName="" SqlType="12" Width="1000" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="2000" OriginalName="1000" ScriptName="" SqlType="12" Width="200" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Varchar 200" OriginalName="Varchar1000" ScriptName="" SqlType="12" Width="200" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Varchar 2001" OriginalName="Varchar1000" ScriptName="" SqlType="12" Width="200" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Y/N" ScriptName="" SqlType="12" Width="1" EnableValues="1" ForceMatch="1" Scale="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
我希望我的解析返回2个值,1000和2000,因为我想要唯一的宽度。我写的代码是:
XDocument xmlDoc = XDocument.Load(@"c:\temp\sample.xml");
var q = from c in xmlDoc.Descendants("FieldType")
group xmlDoc by c.Attribute("Width") into cust_widths
select new
{
key = cust_widths.Key,
value = from val in cust_widths.Elements("Width") select (string)val
};
foreach (var name in q)
{
System.Diagnostics.Debug.WriteLine(name);
}
但仍然会返回:1000,1000,1000,200,200,200。
知道我的语法有什么问题吗?
答案 0 :(得分:4)
试试这个:
XDocument xmlDoc = XDocument.Load(@"c:\temp\sample.xml");
var q =
from c in xmlDoc.Descendants("FieldType")
group c by c.Attribute("Width").Value into cust_widths
select cust_widths.Key;
foreach (var name in q)
{
System.Diagnostics.Debug.WriteLine(name);
}
您的代码存在一些问题:
FieldType
个元素。XAttribute
个对象进行分组,而不是按属性'值进行分组。实际上有一个更简单的查询版本:
var q = xmlDoc
.Descendants("FieldType")
.Select(c => c.Attribute("Width").Value)
.Distinct();
答案 1 :(得分:1)
由于您按XAttribute
运算符返回的Attribute()
对象进行分组,因此您将获得每个元素的唯一组键。您需要使用返回属性的Value
属性按属性值进行分组。