c# - C# 从 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;
}
推荐阅读
- c# - .net Core 中的 .ConfigureKestrel() 方法存在问题
- php - 登录时如何将导航菜单栏更改为“注销”
- node.js - 异步/等待,然后在我的情况下不起作用
- r - find n% of records in a variable in the data frame
- python - 在 repl.it 上保持 Discord Bot 在线
- python - 我怎样才能创建一个动作将与我的主要动作同时发生一段时间?
- c# - Identity signIn / PasswordSignIn 返回成功,但 @User.Identity.IsAuthenticated 返回 false
- python - 使用python在树结构中递归调用函数
- java - 如何从 GeneXus 调用包过程和函数
- sql - 在 For Each 循环容器内的不同点使用参数