Link to home
Start Free TrialLog in
Avatar of Puds32
Puds32Flag for United Kingdom of Great Britain and Northern Ireland

asked on

How do you load this xml file into datagrid

I am trying to load the following file into a datagrid but not getting anywhere
The xml file is as follows, note there is no xsl file:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <ns3:SearchResponse xmlns:ns1="http://www.govtalk.gov.uk/Education/ContactPoint/Common" xmlns:ns2="http://www.govtalk.gov.uk/people/bs7666" xmlns:ns3="http://www.govtalk.gov.uk/Education/ContactPoint/Enquiry">
      <ns3:Status outcome="urn:uk:gov:dcsf:ContactPoint:outcome:success"/>
      <ns3:Child>
        <ns3:DSI subdomain="UID" scope="NAT">02MZX8XM2BWH0233</ns3:DSI>
        <ns3:Summary shielded="false">
          <ns3:ChildName FamilyNameFirstFlag="false">
            <ns1:FamilyName>LEWIS</ns1:FamilyName>
            <ns1:GivenName1>Jallie</ns1:GivenName1>
          </ns3:ChildName>
          <ns3:DateOfBirth>1996-09-05</ns3:DateOfBirth>
          <ns3:Gender>female</ns3:Gender>
          <ns3:AddressInfo>11 GLOUCESTER ROAD, M14 5BZ</ns3:AddressInfo>
          <ns3:ParentInfo>LEWIS Danya</ns3:ParentInfo>
        </ns3:Summary></ns3:Child>
    </ns3:SearchResponse>
  </soapenv:Body>
</soapenv:Envelope>


I am using asp.net 3.5, c#
If any one can help I would be most grateful
Thanks
SOLUTION
Avatar of Miguel Oz
Miguel Oz
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of gokujames
gokujames

Did you try Xml datasource that comes with the .NET framework 3.5 as  i am almost near to displaying it without anything other than Xml Datasource.
If you want the exact match , then please use the XPath expression and bind them individually.
Also did you try reading the xml file into a Dataset and then binding them
Avatar of Puds32

ASKER

Sorry, yes it is a web service response
I have tried using an XML Datasource but I get the error:
"There was an error renering the control.
The data source for gridview with id 'GridView3' did not have any properties or attributes for which to generate columns. Ensure that your data source has content.
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Puds32

ASKER

Hi
From the ns3:Child node and all within - thanks for your help
Can you post the web method declaration?
Avatar of Puds32

ASKER

Sorry for the delay in reply, have been side tracked by other work.

Update - I got some way to an acceptable answer using a dataset  loaded from a text stream, however when the xml structure became more complicated a problem arrose when repeat nested element names ie address, being used as a child for client and for parent, this stopped the automatic creation of the table structure and caused an error, I think I may be going down the wrong road here.

It looks like I need to use either xpath or Linq, does anybody have a view to either preferrence, and if so direct me to a good resource suitable for thickies

As always thanks to everyone for their time
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Puds32

ASKER

Right xpath it is then

In the above xml fragment do I have to create an xmlnamespace manager, if so what would the following code snippit look like

nsmgr.AddNamespace("", "");

and do I have to add all the namespaces to the manager

Thanks
Avatar of Puds32

ASKER

I am starting to have some success!!
The below hooks out the FamilyName. How can I change it to pull out a FamilyName that is equel to a value ie. FamilyName = 'LEWIS1'

Ta


XmlDocument doc = new XmlDocument();
            doc.Load("c:\\testFile.xml");
            XmlNode root = doc.DocumentElement;

            XmlNamespaceManager nmMan = new XmlNamespaceManager(doc.NameTable);

            nmMan.AddNamespace("ns1", "http://www.govtalk.gov.uk/Education/ContactPoint/Common");
            nmMan.AddNamespace("ns2", "http://www.govtalk.gov.uk/people/bs7666");
            nmMan.AddNamespace("ns3", "http://www.govtalk.gov.uk/Education/ContactPoint/Enquiry");
            nmMan.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");


            XmlNode nFamilyName = doc.SelectSingleNode("/soapenv:Envelope/soapenv:Body/ns3:SearchResponse/ns3:Child/ns3:Summary/
ns3:ChildName/ns1:FamilyName", nmMan);

           
            if (nFamilyName != null)
            {
                TextBox2.Text = nFamilyName.InnerXml;
            }
        }
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Puds32

ASKER

Hi to all
I have decided on a cobination of XPath and XMLDataDocument.
Code snippet:
 XmlDataDocument xmlDoc = new XmlDataDocument();

            xmlDoc.Load("c:\\TEST6.xml");

            XmlNodeList elemList = xmlDoc.GetElementsByTagName("ns3:ServiceProvisions");
           

            foreach (XmlNode root in elemList)
            {
                if (root.HasChildNodes)
                {
                    int iNode;
                    int iNodes;

                    iNodes = root.ChildNodes.Count;
                    TextBox1.Text = TextBox1.Text + root.ChildNodes.Count.ToString();
                    for (iNode = 0; iNode < iNodes; iNode++)
                    {
                        TextBox1.Text = TextBox1.Text + "\nl" + root.ChildNodes[iNode].Name + " "

                            + root.ChildNodes[iNode].InnerText;
                    }
                }
            }


The combination works well and I'm now getting quite proficient so will now close this question.
Thanks as usual for all the help.
Until my next question ...
Puds32