?
Solved

Reading Top Five records from XML file ......

Posted on 2003-10-30
8
Medium Priority
?
375 Views
Last Modified: 2010-04-16
Let say I have 100 articles in my XML file and I like to read the top most five articles, how would I do this?
I can read all the articles like this

DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("Articles.xml"));
DataView dv  = ds.Tables[0].DefaultView;

DataList1.DataSource = dv;
DataList1.DataBind();

But I don’t know how would I read top five articles from the xml file.
Thanks





XmlFile
--------------

<?xml version="1.0"?>
<articles>
    <article>
        <id>050</id>
        <title>Article 050 Title</title>
        <author>SomeGuy</author>
        <dateposted>10/22/2003</dateposted>
        <smalldescription>Small description</smalldescription>
        <longdescription>Long Description</longdescription>
        <code>Some code</code>
    </article>
</articles>


C# Code

private void Page_Load(object sender, System.EventArgs e)
{
      DataSet ds = new DataSet();
      ds.ReadXml(Server.MapPath("Articles.xml"));
      DataView dv  = ds.Tables[0].DefaultView;

      DataList1.DataSource = dv;
      DataList1.DataBind();
}




0
Comment
Question by:adamullah
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
8 Comments
 
LVL 2

Expert Comment

by:ericsDev
ID: 9654007
**UNTESTESTED**

you can load the records into your DataView and then loop through the DataView and remove all but the rows you want to keep something like this.

for(int x = 0; x < dv.Rows.Count; x++)
{
if(x>=5)
{
dv.Rows[x].Delete();
}
}

I believe this will work unless there is a better way that someone else knows about :)
0
 
LVL 6

Expert Comment

by:purpleblob
ID: 9658961
What about using XPath on the XML first to extract the required subset of article elements - something like

//article[position() <= 5]/*

where 5 is the first five elements


0
 
LVL 2

Expert Comment

by:ericsDev
ID: 9659108
that should work as long as position() is a supported function by MS... I've found that alot of them aren't... you should be able to find that info here: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/htm/xsd_ref_8nas.asp
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 6

Accepted Solution

by:
purpleblob earned 480 total points
ID: 9659641
Very good point re:support of the function position by MS

So I thought I should try this in .NET. It appears to work fine except I made a small mistake in the XPath statement it should have read

//article[position() <= 5]

Thus becomes

System.Xml.XmlNodeList nodes = xmldoc.SelectNodes("//article[position() <= 5]");

The /* will return the inner items within the top 5 elements as opposed to the elements themselves - whoops, sorry about that
0
 
LVL 2

Expert Comment

by:ericsDev
ID: 9659656
purpleblob: good work, I will keep this method in mind.
0
 

Author Comment

by:adamullah
ID: 9668707
Thanks purpleblob, i also find a good site for XPath. http://www.w3schools.com/xpath/xpath_location.asp

Here is the modified code.


C# codebehind code
------------------------
private void Page_Load(object sender, System.EventArgs e)
{
      XmlDocument xd = new XmlDocument();
      XmlNodeList nl;

      xd.Load(Server.MapPath("Articles.xml"));

      nl = xd.SelectNodes("/articles/article[position() <=3]");
      
      lstArticles.DataSource = nl;
      lstArticles.DataBind();

}


aspx page code:
-------------------
<asp:datalist id="lstArticles" runat="server">
      <itemtemplate>
            <%# ((System.Xml.XmlNode)Container.DataItem).SelectSingleNode("id").InnerText %>
            <br>
            <%# ((System.Xml.XmlNode)Container.DataItem).SelectSingleNode("title").InnerText %>
      </itemtemplate>
</asp:datalist>



XmlFile
--------
<?xml version="1.0"?>
<articles>
    <article>
        <id>050</id>
        <title>Article 050 Title</title>
        <author>SomeGuy</author>
        <dateposted>10/22/2003</dateposted>
        <smalldescription>Small description</smalldescription>
        <longdescription>Long Description</longdescription>
        <code>Some code</code>
    </article>
</articles>
 
 
0
 

Author Comment

by:adamullah
ID: 9668712
purpleblob you got all the points............
0
 
LVL 6

Expert Comment

by:purpleblob
ID: 9670681
Many thanks

Glad to have helped
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Suggested Courses

765 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question