Search code examples
c#asp.netxmlascx

How can I show XML data in an ASPX based on user selection?


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"&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"&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"&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"&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"&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; 
    }

Solution

  • 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"&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