c# - 使用 C# 将选择性 XML 数据加载到数据集中

标签 c# xml linq xpath

感谢一些关于如何在 XML 文件上使用 XPath 以仅提取一些数据并将其加载到数据集中的指示。

ds.ReadXml(fsReadXml);

会将整个 xml 加载到数据集中,但我的要求是仅将特定节点和值加载到数据集中。

示例 xml 数据:

<data cobdate="5 Jul 2011" DBStatus="">
  <view>BOTH</view>
  <show_acctnbr>true</show_acctnbr>
  <summary>
    <headings sum="Summary" real_per="Realized this period" real_trd="Profit/loss in trading currency" real_select="Profit/loss in selected currency" short_term="Short Term Profit/Loss" long_term="Long Term Profit/Loss" />
    <account number="A123456" curr_code="USD" curr_desc="US Dollars" tradecurrvalue="123,123.00" selectcurrvalue="123,123.00" managed="NO" />
    <account number="P123456" curr_code="USD" curr_desc="US Dollars" tradecurrvalue="0.00" selectcurrvalue="0.00" managed="NO" />
  </summary>
  <detail>
    <headings dateaq="Date acquired" datesld="Date sold" desc="Description" sec_nbr="Security number " qty="Quantity" cost="Cost basis" />
    <account number="A123456" currency="US Dollars">
      <item datesold="29 Apr 11" sec_nbr="1234" description="SOME VALUE(USD)" quantity="8,000" proceeds="123,123.0" />
      <item datesold="29 Apr 11" sec_nbr="4567" description="SOME VALUE(USD)" quantity="9,000" proceeds="123,123.0" />
    </account>
    <account number="P123456" currency="US Dollars">
      <item datesold="29 Apr 11" sec_nbr="1234" description="SOME VALUE(USD)" quantity="8,000" proceeds="123,123.0" />
      <item datesold="29 Apr 11" sec_nbr="4567" description="SOME VALUE(USD)" quantity="9,000" proceeds="123,123.00" />
    </account>
  </detail>
</data>

在这个示例数据中,我只需要从 <summary> 节点加载帐户,如果可能的话,只需要加载数字、交易当前值和选择当前值属性。我使用 C# 和 3.5。

最佳答案

使用 XDocument:

var doc = XDocument.Load(fileName);
var lst = doc
       .Descendants("summary")   // don't care where summary is
       .Elements("account ")     // direct child of <summary>
       .Select(x => new 
       {
          number = x.Attribute("number").Value,
          ...
       });

foreach(var account in lst) 
{
  .... // add to DataSet
}

关于c# - 使用 C# 将选择性 XML 数据加载到数据集中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6600713/

相关文章:

c# - 类型转换 LINQ 表达式抛出 "Internal .NET Framework Data Provider error 1025."

c# - 带有组合框列的 DatagridView 虚拟模型

c# - 将派生类序列化/反序列化为基类

android - 在 PreferenceActivity 中使用什么代替 "addPreferencesFromResource"?

c# - 是否可以根据条件取消 .Select 语句中的 select 和 'Continue'?

c# - 为什么这个行得通而这个行不通?

c# - 如何获取鼠标滚轮状态?

c# - 静态方法在 Web 开发中是否安全?

javascript - 在 JS 中创建、编辑和保存 XML

c# - 使用 linq 进行验证/抛出异常