Solved

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

Posted on 2003-10-30
8
364 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
  • 3
  • 3
  • 2
8 Comments
 
LVL 2

Expert Comment

by:ericsDev
Comment Utility
**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
Comment Utility
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
Comment Utility
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
 
LVL 6

Accepted Solution

by:
purpleblob earned 120 total points
Comment Utility
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
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 
LVL 2

Expert Comment

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

Author Comment

by:adamullah
Comment Utility
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
Comment Utility
purpleblob you got all the points............
0
 
LVL 6

Expert Comment

by:purpleblob
Comment Utility
Many thanks

Glad to have helped
0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Change to event 1 72
Default parameter problem in C# 3 25
C# Update Status Bar.... 1 22
index Out OF Range Exception error 4 27
Extention Methods in C# 3.0 by Ivo Stoykov C# 3.0 offers extension methods. They allow extending existing classes without changing the class's source code or relying on inheritance. These are static methods invoked as instance method. This…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

771 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now