Получить последнее значение атрибута в 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;
Примечание. Я всегда ставлю нулевые проверки между доступом к элементу или значению атрибутов, которое я только что прочитал, на всякий случай.