Reputation: 453
I have a xml sample below which I am parsing to get certain values
<Calendar region="abc">
<Format version="1.11"/>
<Data version="0"/>
<Mode mode="FULL"/>
<Period end="31122019" start="15122013"/>
<Holidays>
<Day serviceday="2" date="15122013"/>
</Holidays>
<ListOfRday>
<Rday number="11">
<Description text="Mon"/>
<AppointedPeriod end="31122019" start="15122013" servicedays="11"/>
</Rday>
</ListOfRday>
</Calendar>
Like this there are many Rday
entries in ListOfRday
. How can I get description text for a particular Rday,
say Rday number="20"
, using Linq. What will be the correct Linq select statement to get the value?
Upvotes: 1
Views: 354
Reputation: 235
Parse your xml like code below
XDocument xmldoc = XDocument.Parse(cdata.Html);
xmldoc.Descendants("ListOfRday")
.Descendants("Rday ")
.Select(x => x.Attribute("number").Value.Equals("20"))
.ToList()
.First()
Upvotes: 0
Reputation: 236188
var xdoc = XDocument.Load(path_to_xml);
var day = xdoc.Root.Element("ListOfRday").Elements("Rday")
.FirstOrDefault(d => (int)d.Attribute("number") == 20);
if (day == null)
// day is not found - throw exception or return
var text = (string)day.Element("Description").Attribute("text");
Or in single query:
var text = xdoc.Root.Element("ListOfRday").Elements("Rday")
.Where(d => (int)d.Attribute("number") == 20)
.Select(d => (string)d.Element("Description").Attribute("text"))
.FirstOrDefault();
Another option is usage of XPath:
var xpath = "//ListOfRday/Rday[@number='20']/Description";
var description = xdoc.XPathSelectElement(xpath);
if (description == null)
// day is not found - throw exception or return
var text = (string)description.Attribute("text");
Upvotes: 1