Avatar billede marduk666 Nybegynder
04. oktober 2003 - 21:33 Der er 7 kommentarer og
1 løsning

Læs fra xml fil

Jeg har denne xml fil:

<?xml version="1.0" encoding="iso-8859-1" ?>
<tabel_1>
  <tabel_2>
      <tabel_3>
        <minVariabel_1>abc</minVariabel_1>
        <minVariabel_2>def</minVariabel_2>
        <minVariabel_3>ghi</minVariabel_3>
      </tabel_3>
  </tabel_2>
</tabel_1>

Hvordan læser jeg "minVariabel_2"?
Avatar billede arne_v Ekspert
04. oktober 2003 - 21:52 #1
Der er mange måder at parse XML på.

Her er en:

using System;
using System.Xml;

class MainClass
{
    public static void Main(string[] args)
    {
        XmlTextReader rdr = new XmlTextReader("C:\\test.xml");
        bool state = false;
        while(rdr.Read())
        {
            if( rdr.NodeType == XmlNodeType.Element &&  rdr.Name.Equals("minVariabel_2"))
            {
                state = true;
            }
            if(state && rdr.NodeType == XmlNodeType.Text)
            {
                Console.WriteLine(rdr.Value);
            }
            if( rdr.NodeType == XmlNodeType.EndElement &&  rdr.Name.Equals("minVariabel_2"))
            {
                state = false;
            }
        }
    }
}
Avatar billede arne_v Ekspert
04. oktober 2003 - 21:58 #2
Her er en DOM version:

using System;
using System.Xml;

class MainClass
{
    public static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("C:\\test.xml");
        XmlNodeList elements = doc.GetElementsByTagName("minVariabel_2");
        foreach(XmlNode element in elements)
        {
            Console.WriteLine(element.FirstChild.Value);
        }
    }
}
Avatar billede marduk666 Nybegynder
04. oktober 2003 - 23:30 #3
Foretrækker DOM versionen da den er kort.

Hvordan henter jeg alle variablerne i tabel_3?
Dvs. minVariabel_1, minVariabel_2 og minVariabel_3.
Avatar billede arne_v Ekspert
04. oktober 2003 - 23:35 #4
Jeg prøver lige at lave en forbedret version.
Avatar billede arne_v Ekspert
04. oktober 2003 - 23:39 #5
using System;
using System.Xml;

class MainClass
{
    public static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("C:\\test.xml");
        XmlNodeList elements = doc.GetElementsByTagName("tabel_3");
        foreach(XmlNode element in elements)
        {
            XmlNodeList subelements = element.ChildNodes;
            foreach(XmlNode subelement in subelements)
            {
                Console.WriteLine(subelement.Name + " " + subelement.FirstChild.Value);
            }
        }
    }
}

giver output:

minVariabel_1 abc
minVariabel_2 def
minVariabel_3 ghi
Avatar billede marduk666 Nybegynder
04. oktober 2003 - 23:54 #6
Super!

Hvordan fjerner man så alle ChildNodes i tabel_3 og smider nogle nye ind?
Avatar billede arne_v Ekspert
05. oktober 2003 - 00:08 #7
Nu er det jo lidt svært at vide præcis hvad du vil ha ind, men her er
et eksempel.

using System;
using System.Xml;

class MainClass
{
    public static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("C:\\test.xml");
        doc.Save(Console.Out);
        XmlNodeList elements = doc.GetElementsByTagName("tabel_3");
        foreach(XmlNode element in elements)
        {
            XmlNodeList subelements = element.ChildNodes;
            for(int i = subelements.Count - 1; i >= 0 ; i--)
            {
                element.RemoveChild(subelements[i]);
            }
            XmlNode arne = doc.CreateElement("arne");
            arne.AppendChild(doc.CreateTextNode("This is a test"));
            element.AppendChild(arne);
        }
        doc.Save(Console.Out);
    }
}

udskriver:

<?xml version="1.0" encoding="IBM437"?>
<tabel_1>
  <tabel_2>
    <tabel_3>
      <minVariabel_1>abc</minVariabel_1>
      <minVariabel_2>def</minVariabel_2>
      <minVariabel_3>ghi</minVariabel_3>
    </tabel_3>
  </tabel_2>
</tabel_1>
<?xml version="1.0" encoding="IBM437"?>
<tabel_1>
  <tabel_2>
    <tabel_3>
      <arne>This is a test</arne>
    </tabel_3>
  </tabel_2>
</tabel_1>
Avatar billede marduk666 Nybegynder
05. oktober 2003 - 00:27 #8
Tak for hjælpen!

Du får lidt flere points :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester