繁体   English   中英

C# 从 XML 获取最后一个元素的属性值

[英]C# getting last element's attribute values from XML

我有以下 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);
    }

它工作正常,但它从 XML 返回所有 3 个值。 不过我只需要最后一个。 我尝试使用 Last() 但它没有用。 使用 Last() 给我带来最后一个字符。 我只需要这个;

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

如何实现? 我错过了什么?

一探究竟。 它根据位置找到最后一个<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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM