我正在尝试从以下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
的值,即startdate
和price
。
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]);
}
答案 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;