Question

My XML file look like this:

<?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>

I want to get last attribute value of khachhang element. In this case is maso="kh02". Because i want when i insert new khachhang element, maso attribute will increase auto. Someone can advice me some good ...Thank everyone so much!

Was it helpful?

Solution 2

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

Or

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

Also if it is possible that no khachhang elements will be in your xml, you should try to get last element. And then get attribute if khachhang element was found:

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

It's important to use LastOrDefault in this case. Otherwise you'll get an exception.

OTHER TIPS

Alternatively

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

Note I always put null checks in between accessing an element or attributes value that I have just read, just in case.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top