Получить последнее значение атрибута в XML с помощью Linq

Мой XML-файл выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<dskh>
  <khachhang maso="kh01">
    <ten_kh>nhi</ten_kh>
    <tuoi_kh>15</tuoi_kh>
    <dchi_kh>dt</dchi_kh>
  </khachhang>

  <khachhang maso="kh02">
    <ten_kh>hung</ten_kh>
    <tuoi_kh>15</tuoi_kh>
    <dchi_kh>hcm</dchi_kh>
  </khachhang>
</dskh>

Я хочу получить последнее значение атрибута элемента khachhang. В данном случае это maso = "kh02". Поскольку я хочу, когда я вставляю новый элемент хачханга, атрибут maso увеличивает значение auto. Кто-то может посоветовать мне что-нибудь хорошее... Спасибо всем большое!

2 ответа

Решение
var xdoc = XDocument.Load(path_to_xml);
var result = (string)xdoc.XPathSelectElement("//khachhang[last()]")
                         .Attribute("maso");

Или же

var result = (string)xdoc.Descendants("khachhang").Last()
                         .Attribute("maso");

Также, если возможно, что нет khachhang элементы будут в вашем XML, вы должны попытаться получить последний элемент. А затем получить атрибут, если khachhang элемент был найден:

var lastKhachhang = xdoc.Descendants("khachhang").LastOrDefault();
if (lastKhachhang == null)
    // use default maso value
else
   maso = (string)lastKhachhang.Attribute("maso");

Важно использовать LastOrDefault в этом случае. В противном случае вы получите исключение.

Альтернативно

var xdoc = XDocument.Load(path_to_xml);
var lastElement = xdoc.Root.Elements("khachhang").Last();
var value = lastElement.Attribute("maso").Value;

Примечание. Я всегда ставлю нулевые проверки между доступом к элементу или значению атрибутов, которое я только что прочитал, на всякий случай.

Другие вопросы по тегам