Извлечь запись с самой последней датой из потока XML - PullRequest
0 голосов
/ 06 февраля 2019

Мне предоставляют поток 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 голосов
/ 06 февраля 2019

Не используйте DataSet / DataTable для анализа xml.Это сложно и неудобно.

Я предлагаю использовать Linq to 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...