Получить элемент из XML c определённым атрибутом

Рейтинг: 0Ответов: 1Опубликовано: 16.03.2023

Имеется вот такой XML:

<?xml version="1.0" encoding="utf-8"?>
<Objects>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="EmailAddress" Type="System.String">Anton.Antonov@gamil.com</Property>
    <Property Name="ExpirationDate" Type="System.DateTime">21.07.2022 10:54:59</Property>
  </Object>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="EmailAddress" Type="System.String">Slavka.Pavlov@mail.r0</Property>
    <Property Name="ExpirationDate" Type="System.DateTime">23.02.2021 5:51:59</Property>
  </Object>
</Objects>

Как с помощью LINQToXml вытащить Property с Name ="ExpirationDate"? Property с name="EmailAddress" вытаскивается легко, а вот как вытащить второй Property ума не приложу. Всё это вытаскивается в лист,при заполнении Date выходит ошибка.

List<EmailDatePair> emails = xdoc.Descendants("Object").Select(val => new EmailDatePair() 
{
  Email = val.Element("Property").Value,
  Date = val.Element("Property").Attribute("Name").Value == "ExpirationDate",
}).ToList();

Ответы

▲ 0Принят

Пожалуйста, попробуйте следующее решение.

c#

void Main()
{
    const string filePath = @"e:\Temp\keks01.xml";
    XDocument xdoc = XDocument.Load(filePath);
    
    List<EmailDatePair> emails = xdoc.Descendants("Object").Select(val => new EmailDatePair()
    {
        Email = val.Elements("Property").Where(v => v.Attribute("Name").Value=="EmailAddress").FirstOrDefault().Value,
        Date = val.Elements("Property").Where(v => v.Attribute("Name").Value=="ExpirationDate").FirstOrDefault().Value
    }).ToList();
}

public class EmailDatePair
{
    public string Email { get; set; }
    public string Date  { get; set; }
}

Output

введите сюда описание изображения