Alexandru Florin
Alexandru Florin

Reputation: 11

C# Read a specific element which is in a XML Node

I searched a long time in order to get an answer but as i can see is not working. I have an XML File and I would like to read a specific element from a node. For example, this is the XML:

<Root>
  <TV>
    <ID>2</ID>
    <Company>Samsung</Company>
    <Series>13523dffvc</Series>
    <Dimesions>108</Dimesions>
    <Type>LED</Type>
    <SmartTV>Yes</SmartTV>
    <OS>WebOS</OS>
    <Price>1993</Price>
  </TV>
</Root>

I want to get the ID element in the code as a variable so i can increment it for the next item which i will add. This is the code at this moment, but i can not find a way to select something from the item itself.

XDocument doc = XDocument.Load("C:TVList.XML");
XElement TV = doc.Root;
var lastElement = TV.Elements("TV").Last()

Upvotes: 0

Views: 73

Answers (2)

Charles Mager
Charles Mager

Reputation: 26213

A query for the last TV's id (this will return 0 if there are no elements):

var lastId = (int) doc.Descendants("TV")
    .Elements("ID")
    .LastOrDefault();

You might also want the highest id (in case they're not in order):

var maxId = doc.Descendants("TV")
    .Select(x => (int)x.Element("ID"))
    .DefaultIfEmpty(0)
    .Max();

See this fiddle for a working demo.

Upvotes: 2

Mostafiz
Mostafiz

Reputation: 7352

Use like this to get id value

XDocument doc = XDocument.Load(@"C:\TVList.XML");
XElement root = doc.Element("Root");
XElement tv = root.Element("TV");
XElement id = tv.Element("ID");
string idvalue = id.Value;

also make your <Type>LED</Tip> tag of xml to <Type>LED</Type> for match

Upvotes: 2

Related Questions