Search code examples
c#xmlgetelementsbytagname

Using GetElementsByTagName in C# Windows Form with XML


I'm loading a xml page from a secured website which i want to read with Xml Document.

A part of the xml:

<ActueleVertrekTijden>
  <VertrekkendeTrein>
    <RitNummer>5070</RitNummer>
    <VertrekTijd>2015-03-20T19:42:00+0100</VertrekTijd>
    <EindBestemming>Den Haag Centraal</EindBestemming>
    <TreinSoort>Sprinter</TreinSoort>
    <RouteTekst>Lage Zwaluwe, Dordrecht, Rotterdam C.</RouteTekst>
    <Vervoerder>NS</Vervoerder>
    <VertrekSpoor wijziging="false">6</VertrekSpoor>
 </VertrekkendeTrein>
 <VertrekkendeTrein>
    <RitNummer>1971</RitNummer>
    <VertrekTijd>2015-03-20T19:50:00+0100</VertrekTijd>
    <EindBestemming>Venlo</EindBestemming>
    <TreinSoort>Intercity</TreinSoort>
    <RouteTekst>Tilburg, Eindhoven, Helmond</RouteTekst>
    <Vervoerder>NS</Vervoerder>
    <VertrekSpoor wijziging="false">4</VertrekSpoor>
    <Opmerkingen> // This is not always available, but it is important and specific for a 'VertrekkendeTrein'
      <Opmerking>Rijdt vandaag niet</Opmerking>
        </Opmerkingen>
    </VertrekkendeTrein>

Now i'm using the following code:

string urlo = "the website";
            string resultje = HttpGeto(urlo);
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(resultje);

            XmlNodeList ns = xmlDoc.GetElementsByTagName("VertrekkendeTrein");



    //MessageBox.Show(ns[0].InnerXml); //*This part works it shows the xml inside the first "VertrekkendeTrein"*

    //*Now I want to read all the items of ns[0] and split it like: GetElementsByTagName("RouteTekst")*

                XmlDocument xd1 = new XmlDocument();
                xd1.LoadXml(ns[0].InnerXml);
                XmlNodeList nsvertrektijdje = xd1.GetElementsByTagName("RouteTekst");
                var vty1 = nsvertrektijdje[0].InnerText;
                MessageBox.Show(vty1);

The problem which i'm having now is that I can't load ns[0].InnerXml in LoadXml. It gave no result.

Edit:

Now i'm using the following:

string urlo = "website";
            string resultje = HttpGeto(urlo);
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(resultje);

            XmlNodeList ns = xmlDoc.GetElementsByTagName("VertrekkendeTrein");

            var element = ns[0] as XmlElement;
            XmlNodeList nsvertrektijdje = element.GetElementsByTagName("RouteTekst");
            var vty1 = nsvertrektijdje[0].InnerText;
            MessageBox.Show(vty1);

But it still doesn't work


Solution

  • The problem is that since the ns[0].InnerXml doesn't have a root node , you are unable to parse the inner xml. try appending a temp node while you loading xml

    xd1.LoadXml("<data>" + ns[0].InnerXml + "</data>");