【问题标题】:C# getting last element's attribute values from XMLC# 从 XML 获取最后一个元素的属性值
【发布时间】:2020-03-18 14:53:27
【问题描述】:

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

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

【问题讨论】:

    标签: c# xml xml-parsing xelement


    【解决方案1】:

    检查一下。它根据位置找到最后一个&lt;GEvt.../&gt; 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;
    }
    

    【讨论】:

    • 但问题是 ZipCode 始终不等于 def。这是一个动态值。无论其他人如何,我都需要检索最后一个。
    • 我调整了答案。
    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2011-05-07
    相关资源
    最近更新 更多