tags:

views:

252

answers:

3

I have the XML given below. From this XML, in an ASPX page with an ASCX control that will contain the data, I want a drop-down on top with option "GMAT", "GRE", "LSAT", and "MCAT". And when I select GMAT below it will show only GMAT brochure and same with others.

Can you please provide some code for this?

<?xml version="1.0" encoding="utf-8"?>
<root>
    <data>
        <ImageId>tcm556662</ImageId>
        <ImageURL>/Images/2008_gmat_brochure_uk_thumb_tcm55-7311.gif</ImageURL>
        <ImageTitle>GMAT Brochure</ImageTitle>
        <Description>&lt;p xmlns="http://www.w3.org/1999/xhtml"&amp;gt;Classroom
                     and Online Coursegrams.&lt;/p&gt;</Description>
        <FilePath>/Images/gmat_brochure_uk_tcm55-8064.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm5510981</ImageId>
        <ImageURL>/Images/practice-test-image_tcm55-10980.JPG</ImageURL>
        <ImageTitle>GMAT Problem Solving Questions and Answers</ImageTitle>
        <Description>Download Kaplan's GMAT Problem So to each question.</Description>
        <FilePath>/Images/gmat-sample-questions_tcm55-10979.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm5511066</ImageId>
        <ImageURL>/Images/practice-test-image_tcm55-10980.JPG</ImageURL>
        <ImageTitle>GMAT Sentence Correction Practice Questions</ImageTitle>
        <Description>&lt;p xmlns="http://www.w3.org/1999/xhtml"&amp;gt;Tick the box to
                     download GMsee how you might do on this section of the GMAT
                     exam.&lt;/p&gt;</Description>
        <FilePath>/Images/gmat-sentence-correction_tcm55-11065.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm556663</ImageId>
        <ImageURL>/Images/gre_brochure_thumb_tcm55-7315.gif</ImageURL>
        <ImageTitle>GRE Brochure</ImageTitle>
        <Description>&lt;p xmlns="http://www.w3.org/1999/xhtml"&amp;gt;Courses and
                     Tutoring for the Grprograms&lt;/p&gt;</Description>
        <FilePath>/Images/gre-brochure_tcm55-8065.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm5511219</ImageId>
        <ImageURL>/Images/practice-test-image_tcm55-10980.JPG</ImageURL>
        <ImageTitle>GRE Quantitative Questions Answers and Explanations</ImageTitle>
        <Description>Download the answers and exp with the correct answer. Tick
                    the box and click download now to start the process.</Description>
        <FilePath>/Images/gre-quantitative-practice-questions_tcm55-11214.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm5511220</ImageId>
        <ImageURL>/Images/practice-test-image_tcm55-10980.JPG</ImageURL>
        <ImageTitle>GRE Sentence Completion Practice Question Answers and Explanations</ImageTitle>
        <Description>&lt;p xmlns="http://www.w3.org/1999/xhtml"&amp;gt;Complete the
                    sentence on the download now button to see how you did.&lt;/p&gt;</Description>
        <FilePath>/Images/gre-sentence-completions_tcm55-11213.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm558073</ImageId>
        <ImageURL>/Images/lsat_brochure_thumb_tcm55-7316.gif</ImageURL>
        <ImageTitle>LSAT Brochure</ImageTitle>
        <Description>Courses and Tutoring for the Law School Admission US law schools</Description>
        <FilePath>/Images/lsat-brochure_tcm55-8066.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm5511275</ImageId>
        <ImageURL>/Images/practice-test-image_tcm55-10980.JPG</ImageURL>
        <ImageTitle>LSAT Comparative Reading Practice Questions Answers and Explanations</ImageTitle>
        <Description>Try answering the LSAT Comparative Reading and click on
                     download now.</Description>
        <FilePath>/Images/comparative-reasoning_tcm55-11269.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm5511281</ImageId>
        <ImageURL>/Images/practice-test-image_tcm55-10980.JPG</ImageURL>
        <ImageTitle>LSAT Reading Comprehension Practice Questions Answers and Explanations</ImageTitle>
        <Description>&lt;p xmlns="http://www.w3.org/1999/xhtml"&amp;gt;Read the passage
                     and try the questions as now Lion Practice Questions Answers
                     and Explanations.&lt;/p&gt;</Description>
        <FilePath>/Images/lsat-reading-comprehension_tcm55-11280.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm558074</ImageId>
        <ImageURL>/Images/mcat_brochure_thumb_tcm55-7317.gif</ImageURL>
        <ImageTitle>MCAT Brochure</ImageTitle>
        <Description>Courses and Tutoring for the Medical College Admission Test
                     (MCAT)</Description>
        <FilePath>/Images/mcat-brochure_tcm55-8067.pdf</FilePath>
    </data>
    <data>
        <ImageId>tcm5511278</ImageId>
        <ImageURL>/Images/practice-test-image_tcm55-10980.JPG</ImageURL>
        <ImageTitle>MCAT Biological Sciences Practice Questions Answers and Explanations</ImageTitle>
        <Description>Have you wri download now to find out how you've done.</Description>
        <FilePath>/Images/mcat-biological-sciences_tcm55-11271.pdf</FilePath>
    </data>
</root>

Below is the Function for reading the XML file:

private DataSet GenerateDatasetFromXml()
    {
        string xmlFile = string.Empty;
        DataSet xmlFileData = new DataSet();
        string selItem = string.Empty;
        xmlFile = @Server.MapPath("~/" + ConfigurationManager.AppSettings["BrochureXml"].ToString());
        string sfinalString = "";
        hdnIds.Value = "";
        try
        {
            if (File.Exists(xmlFile))
            {
                xmlFileData.ReadXml(xmlFile);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        } 
        return xmlFileData; 
    }
A: 

Looking at the XML structure that you have there it is not necessary formatted in the easiest way to be able to do this out of the box.

If you have the ability to change the structure I would add a "" or similar node, or maybe even an attribute on the element. In there you can group each of your items, providing your desired value.

Then using XML manipulation methods you can easily use XPath to select items out of the list, or to create a listing of available items.

Mitchel Sellers
yes you are true, but we can filter the title having "GMAT" in it will appear in same group
MKS
A: 

If you have LINQ available you could do the following... I'm not sure if the ImageTitle element is your matching element but...

XDocument xml = XDocument.Load("MyXMLFile.xml");

string selectedItem = "GMAT"; //Wherever you get this string from

var matchedItems = xml.Root.Descendants("data")
                           .Where(ele => ele.Element("ImageTitle").Value.StartsWith(selectedItem));
Quintin Robinson
+1  A: 

I want a dropdown on top with option "GMAT", "GRE", "LSAT", "MCAT"

Right now, you could only select those items based on string-parsing the ImageTitle and finding substring in it - less than optimal...

If there's any chance at all, I'd recommend adding a tag (or whatever you want to call it) to your data, something like this:

<data>
  <ImageId>tcm556662</ImageId>
  <ImageURL>/Images/2008_gmat_brochure_uk_thumb_tcm55-7311.gif</ImageURL>
  <ImageTitle>GMAT Brochure</ImageTitle>
  <Type>GMAT</Type>
  <Description>&lt;p xmlns="http://www.w3.org/1999/xhtml"&amp;gt;Classroom and Online Coursegrams.&lt;/p&gt;</Description>
  <FilePath>/Images/gmat_brochure_uk_tcm55-8064.pdf</FilePath>
</data>

That way, selecting the proper elements would be as easy a very simple XPath expression:

XmlNodeList _list = myXmlDocument.SelectNodes("//data[Type = 'GMAT']);

once you have loaded your data file into an XmlDocument (or you the Linq-to-XML way, if you prefer that).

Marc

marc_s
Thanks Marc I have added my code which is reading my XML file, can you please modify/add code according to above requirement. Thanks
MKS