从xml流中提取具有最新日期的记录

时间:2019-02-06 18:38:38

标签: .net xml datatable

我提供了一个xml流,它是一个记录表,其中的一个字段表示记录的生效日期。我需要记录最近的生效日期。

<?xml version=1.0?>
<table>
    <row id=12 employeeId=151>  
        <field id=divisionCode>COA1</field>  
        <field id=glCode>4330</field>  
        <field id=payType>FTHR</field>
        <field id=schedule>9a -7:30p M - F</field>
        <field id=effectiveDate>2016-10-12</field>
    </row>
    <row id=26 employeeId=151>  
        <field id=divisionCode>COA1</field>  
        <field id=glCode>4330</field>  
        <field id=payType>FTHR</field>
        <field id=schedule>7a -3:30p M - F</field>
        <field id=effectiveDate>2019-01-10</field>
    </row>
</table>

我想检索有效日期= 2019-01-1的记录的所有字段。

谢谢!

语言并不重要,因为我只需要C#/ VB.NET中同样精通的概念。

我尝试了几件事,包括:

Dim dt As DataTable = New DataTable()
Dim sr As StringReader = New StringReader(xmlStr)
Dim ds As DataSet = New DataSet()
ds.ReadXml(sr)
dt = ds.Tables(0)

谢谢。

1 个答案:

答案 0 :(得分:0)

请勿使用DataSet / DataTable来解析xml。既困难又不便。

我建议使用Linq到Xml。

XElement xml = XElement.Parse(xmlStr);

var maxEffectiveDate = xml.Elements("row")
    .Elements("field")
    .Where(field => field.Attribute("id").Value == "effectiveDate")
    .Max(field => field.Value);

var rows = xml.Elements("row")
    .Where(row => row.Elements("field")
        .Any(field => field.Attribute("id").Value == "effectiveDate"
                   && field.Value == maxEffectiveDate));