使用XDocument循环遍历节点的所有属性



我有以下存储表定义的xml。如何使用XDocument(C#3.5)循环遍历传递的表名的每一列(每个表只出现一次)及其属性

例如:如果用户通过CurrencySummary,我想读取每一列及其所有属性,如HeaderDescription、HeaderName等。

<?xml version="1.0" encoding="utf-8" ?>
<TableDef>
  <CurrencySummary>
    <Column Name="Currency" HeaderDescription="Currency" HeaderName="Currency" ColumnType="TableColumnType.Text" IsHidden = "false" Position="0" Width="100" />
    <Column Name="ParamortizedValue" HeaderDescription="Par/amortized value" HeaderName="paramortizedvalue" ColumnType="TableColumnType.Number" IsHidden = "false" Position="1" Width="200" />
    <Column Name="PercentBondTotal" HeaderDescription="% of bond total" HeaderName="percentbondtotal" ColumnType="TableColumnType.Number" IsHidden = "false" Position="2" Width="150" />
  </CurrencySummary>
  <CallSchedule>
    <Column Name="Calldate" HeaderDescription="Call date" HeaderName="Calldate" ColumnType="TableColumnType.Text" IsHidden = "false" Position="0" Width="100" />
    <Column Name="Issue" HeaderDescription="Issue" HeaderName="Issue" ColumnType="TableColumnType.Text" IsHidden = "false" Position="1" Width="100" />
    <Column Name="ParamortizedValue" HeaderDescription="Par/amortized value" HeaderName="paramortizedvalue" ColumnType="TableColumnType.Number" IsHidden = "false" Position="2" Width="200" />
    <Column Name="PercentBondTotal" HeaderDescription="% of bond total" HeaderName="percentbondtotal" ColumnType="TableColumnType.Number" IsHidden = "false" Position="3" Width="150" />
  </CallSchedule>
</TableDef>

我正试图通过以下方式实现这一点:(编辑:根据Henk的建议)

var doc = XDocument.Load("TableDefinations.xml");
var cols = doc.Descendants("CurrencySummary").First();
foreach (var col in cols.Elements())
{
    foreach (XAttribute at in col.Attributes())
    {
        //do something with the at.Name and at.Value
    }
}

这是一种有效的方式吗?或者还有比这更好的方法吗?

这在一定程度上取决于有多少<CurrencySummary>以及它们的位置是否重要。

var summ = doc.Descendants("CurrencySummary").First();
foreach (var col in summ.Elements())
   ...

EDITOP未打开。Net 4,所以不使用SelectMany,如果Single()不使用。用First() 替代Net 4.0

看起来你应该只有一个"CurrencySummary",所以。。。

var doc = XDocument.Load("TableDefinations.xml");
foreach(XElement col in doc.Descendants("CurrencySummary").Single().Elements())
{
    foreach(XAttribute at in col.Attributes())
    {
        at...
    }
}

将遍历一个也是唯一的CurrencySummary元素中所有元素的所有属性,位于TableDefninations.xml中的任何位置。

相关内容

  • 没有找到相关文章

最新更新