C# получение значений атрибутов последнего элемента из XML - PullRequest
0 голосов
/ 18 марта 2020

у меня ниже XML.

  <Bd>
  <GEvt ZipCode="xyz" EvtDtm="2020-03-12T02:26:35+01:00"></GEvt>
  <GEvt ZipCode="abc" EvtDtm="2020-03-12T02:32:35+01:00"></GEvt>
  <GEvt ZipCode="def" EvtDtm="2020-03-12T02:34:35+01:00"></GEvt>
  </Bd>

Мне не нужны первые два. Мне нужен только последний;

<GEvt ZipCode="def" EvtDtm="2020-03-12T02:34:35+01:00"></GEvt>

Вот мой код;

  var lineItemDetails = xdoc.Root?.Descendants("Bd");

  foreach (var lineItemDetail in lineItemDetails?.Nodes().OfType<XElement>())
    {
    var ZipCode = lineItemDetail?.Attribute("ZipCode")?.Value;
    var EvtDtm = lineItemDetail?.Attribute("EvtDtm")?.Value;
    Console.WriteLine(ZipCode);
    Console.WriteLine(EvtDtm);
    }

Работает нормально, но возвращает все 3 значения из XML. Однако мне нужен только последний. Я пытался использовать Last (), но это не сработало. Использование Last () приносит мне последний символ. Мне нужно только это;

<GEvt ZipCode="def" EvtDtm="2020-03-12T02:34:35+01:00"></GEvt>

Как этого добиться? Чего мне не хватает?

1 Ответ

2 голосов
/ 18 марта 2020

Проверьте это. Он находит последний <GEvt.../> XML элемент на основе своей позиции.

c#

void Main()
{
    const string GEVT = "GEvt";
    const string ZIPCODE = "ZipCode";
    const string EVTDTM = "EvtDtm";

    XElement xml = XElement.Parse(@"<Bd>
        <GEvt ZipCode='xyz' EvtDtm='2020-03-12T02:26:35+01:00'></GEvt>
        <GEvt ZipCode='abc' EvtDtm='2020-03-12T02:32:35+01:00'></GEvt>
        <GEvt ZipCode='def' EvtDtm='2020-03-12T02:34:35+01:00'></GEvt>
        </Bd>");

    // get desired XML element
    XElement lastElement = xml.Elements(GEVT).Last();

    // get attributes values
    string Zipcode = lastElement.Attributes(ZIPCODE).FirstOrDefault().Value;
    string EvtDtm = lastElement.Attributes(EVTDTM).FirstOrDefault().Value;
}
...