Avatar billede jespere Nybegynder
29. maj 2012 - 14:53 Der er 5 kommentarer og
1 løsning

Læsning af XML / C#

Hej eksperter.

Jeg har følgende xml-fil:

<Elements>
  <Element>
    <Id>1234</Id>
    <Name>Ole</Name>
    <Pic>Picture1.jpg</Pic>
    <Pic>Picture2.jpg</Pic>
    <Pic>Picture3.jpg</Pic>
  </Element>
  <Element>
    <Id>5678</Id>
    <Name>Jens</Name>
    <Pic>Picture12.jpg</Pic>
    <Pic>Picture22.jpg</Pic>
    <Pic>Picture63.jpg</Pic>
  </Element>
  <Element>
    <Id>3456</Id>
    <Name>Stine</Name>
    <Pic>image1.jpg</Pic>
    <Pic>billede2.bmp</Pic>
    <Pic>Picture32.jpg</Pic>
  </Element>
</Elements>

For hvert element vil jeg gerne have fat i <Id>, <Name> og mindst ét af <Pic>

Jeg har pt. følgende kode:

XmlTextReader reader = new XmlTextReader(xmlfilen);
reader.WhitespaceHandling = WhitespaceHandling.None;

DataSet ds = new DataSet();
ds.ReadXml(reader);
DataTable dt = ds.Tables["Element"];

for (int r = 0; r < dt.Rows.Count; r++)
{
  DataRow dr = dt.Rows[r];
  string Id = dr["Id"].ToString();
  string Name = dr["Name"].ToString();
}

Men hvordan får jeg fat på <Pic> ?
dr["Pic"].ToString() er tom.

Nogen gode forslag ?
Avatar billede arne_v Ekspert
29. maj 2012 - 15:03 #1
XmlDocument og XPath

(evt. LINQ XML)
Avatar billede montago Praktikant
29. maj 2012 - 15:49 #2
endnu bedre:

brug Visual Studio 2010's XML functioner:

Create XML Scema from XML -> XSD

derefter henter du XSD2Code eller XML2CODE som kan lave dit XML Schema om til en Class

når du så har din class, kan du med et snuptag DeSerialize XML til et Object som er nemt at dot'e sig rundt i :)
Avatar billede jespere Nybegynder
29. maj 2012 - 16:52 #3
>Arne

Jeg prøvede at bruge XmlDocument og XPath, men kunne ikke få det til at spille.
Kunne du evt. lave et eksempel med dette, som læser min xml-fil ?

Jesper
Avatar billede arne_v Ekspert
29. maj 2012 - 17:01 #4
using System;
using System.Xml;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string s = @"<Elements>
  <Element>
    <Id>1234</Id>
    <Name>Ole</Name>
    <Pic>Picture1.jpg</Pic>
    <Pic>Picture2.jpg</Pic>
    <Pic>Picture3.jpg</Pic>
  </Element>
  <Element>
    <Id>5678</Id>
    <Name>Jens</Name>
    <Pic>Picture12.jpg</Pic>
    <Pic>Picture22.jpg</Pic>
    <Pic>Picture63.jpg</Pic>
  </Element>
  <Element>
    <Id>3456</Id>
    <Name>Stine</Name>
    <Pic>image1.jpg</Pic>
    <Pic>billede2.bmp</Pic>
    <Pic>Picture32.jpg</Pic>
  </Element>
</Elements>";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(s);
            foreach(XmlNode n in doc.SelectNodes("/Elements/Element"))
            {
                string id = n.SelectSingleNode("Id/text()").Value;
                string name = n.SelectSingleNode("Name/text()").Value;
                string pic = n.SelectSingleNode("Pic/text()").Value;
                Console.WriteLine(id + " " + name + " " + pic);
            }
            Console.ReadKey();
        }
    }
}
Avatar billede jespere Nybegynder
29. maj 2012 - 20:58 #5
Hej Arne

Super, det var lige det som skulle til.
Tak for det.

Lægger du et svar ?

Jesper
Avatar billede arne_v Ekspert
29. maj 2012 - 21:35 #6
kommer her
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