如何从XML文档获取价值

时间:2018-10-11 10:15:20

标签: c# xml linq

我正在尝试从以下xml示例中提取值:

<myPrices>
  <Prices Date="10-Oct-18" ReportName="myReport">
    <Record RecordId="1">
      <COLUMN DisplayName="Start Date" FormalName="startdate">11.10.2018</COLUMN>
      <COLUMN DisplayName="End Date" FormalName="Price">10</COLUMN>
    </Record>
    <Record RecordId="2">
      <COLUMN DisplayName="Start Date" FormalName="startdate">11.10.2018</COLUMN>
      <COLUMN DisplayName="End Date" FormalName="Price">20</COLUMN>
    </Record>
  </Prices>
</myPrices>

因此,对于上述情况,我想要值10和20。

到目前为止(从Stackoverflow link起,我有以下内容,但这给了我FormalName的值,即startdateprice

string[] arr = new string[3];
var dr = from n in prices.Descendants("COLUMN")
         select new string[]
         {
             arr[0] = n.Attribute("FormalName").Value
         };

foreach (var item in dr)
{
    dt.Rows.Add(item[0]);
}

1 个答案:

答案 0 :(得分:1)

您将获得FormalName的值,因为这就是您所选择的。您想要的是仅过滤出COLUMN的属性FormalName等于"Price"的{​​{1}},然后检索元素的值:

var result = prices.Descendants("COLUMN")
                   .Where(e => e.Attribute("FormalName")?.Value == "Price")
                   .Select(e => e.Value);

现在哪个IMO在查询语法上看起来会更干净:

var result = from c in prices.Descendants("COLUMN")
             where c.Attribute("FormalName")?.Value == "Price"
             select c.Value;