Tech
Forums
Jobs
Books
Events
Interviews
Live
More
Learn
Training
Career
Members
Videos
News
Blogs
Challenges
Certification
Contribute
Article
Blog
Video
Ebook
Interview Question
Collapse
Feed
Dashboard
Wallet
Learn
Achievements
Network
Rewards
SharpGPT
Premium
Contribute
Article
Blog
Video
Ebook
Interview Question
Register
Login
USING XDOCUMENT & LINQ COMBINATION
WhatsApp
Jaish Mathews
13y
16.2
k
0
0
25
Blog
I have below XML
<?xml version="1.0" encoding="utf-8" ?>
<products>
<product>
<code>1</code>
<name>Product1</name>
<description>1st product</description>
<price>100</price>
</product>
<product>
<code>2</code>
<name>Product2</name>
<description>2nd product</description>
<price>200</price>
</product>
<product>
<code>3</code>
<name>Product3</name>
<description>3rd product</description>
<price>800</price>
</product>
</products>
I also have one datagrid inside my page. My HTML as below
<html xmlns="
http://www.w3.org/1999/xhtml
">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</form>
</body>
</html>
Look at my code behind
protected void Page_Load(object sender, EventArgs e)
{
XDocument prodDoc = XDocument.Load(Server.MapPath("Products.xml"));
var products = from prd in prodDoc.Descendants("product") select new { name = (string)prd.Element("name"), desc = (string)prd.Element("description"), price = (int)prd.Element("price") };
GridView1.DataSource = products;
GridView1.DataBind();
}
1st line I am using XDocument to load the existing XML document. XDocument is really flexible with LINQ.
2nd line I used a simle LINQ. It's saying "I want all elements named "product" and store those to a variable named 'prd'. Then from that 'prd' variable I need to select 2 fields named 'name','desc' and 'price. 'name' field should be loaded with 'name' element value and 'desc' should be loaded with 'description' element value and 'price' field should be loaded with 'price' element value." I think you got this query explanation.
3rd and 4th line just binding my LINQ out put to the data grid. You should try with various combinations of XDocumment + LINQ like this.
Before ending 1 alert. There is always better chance to get runtime errors during XML parsing. Especially when there may not be 1 element available. For eg. I just modified the xml like below. Commented one price.
<?xml version="1.0" encoding="utf-8" ?>
------------------------
------------------------
<!--<price>800</price>-->
</product>
</products>
Once you run the alicationyou will get error as we are trying to convert one null value inside LINQ query ie.
price = (int)prd.Element("price").
The resolution is the for all such xml parsing use nullable objets in place. So convert your LINQ query like below.
var products = from prd in prodDoc.Descendants("product") select new { name = (string)prd.Element("name"), desc = (string)prd.Element("description"), price = (int
?
)prd.Element("price") };
New key word "?" will make specifc element value as nullable.
Up Next
LINQ-uses of orderby to sort a list of words alphabetically.
Ebook Download
View all
Printing in C# Made Easy
Read by 22.3k people
Download Now!
Learn
View all
Membership not found