【发布时间】:2011-08-01 14:11:17
【问题描述】:
我有一个包含如下数据的 XML 文件:
<Details>
<TableDef>
<Column Name="Calldate" HeaderName="Calldate" SourceColumnName="Calldate" IsHidden = "false" Position="4" />
<Column Name="Issue" HeaderName="Issues" SourceColumnName="Issues" IsHidden = "false" Position="3" />
<Column Name="ParamortizedValue" HeaderName="paramortizedvalue" SourceColumnName="Value" IsHidden = "false" Position="1" />
<Column Name="PercentBondTotal" HeaderName="percentbondtotal" SourceColumnName="Percentage" IsHidden = "false" Position="2" />
</TableDef>
</Details>
我想知道按属性过滤和排序元素的最佳和有效方法是什么,以便我可以在代码中进一步使用排序后的元素?
在上面的例子中,我想按“IsHidden = false”过滤,然后按“Position”属性对元素进行排序。
我有以下代码可以读取所有元素而不进行任何排序:
var doc = XDocument.Load("data.xml");
var nodeTableDefInfo = doc.XPathSelectElements("/Details");
var elements = nodeTableDefInfo.Elements("TableDef").Elements();
foreach (var e in elements)
{
//want to work on the sorted elements
}
各位,感谢您提供的所有解决方案。在我阅读您的解决方案之前,我想出了这个:
var elements = nodeTableDefInfo.Elements("TableDef").Elements();
var sortedElements = (from element in elements
where element.Attribute("IsHidden").Value == "false"
orderby element.Attribute("Position").Value ascending
select element);
foreach (var e in sortedElements)
{
//work on the sorted elements
}
现在,经过解决方案,我真的很喜欢GFK提供的解决方案和解释。我想我需要对空值进行一些处理。谢谢大家。
【问题讨论】: