Avatar billede blod_1 Nybegynder
25. december 2009 - 14:55 Der er 17 kommentarer og
1 løsning

XML layout

Et let spørgsmål...

Jeg skal igang med at lave noget XML læser og skriver til den webserver jeg er igang med, men inden jeg går igang ville det nok være en ide lige at finde ud af om det overhovedet er det rigtige jeg går ud fra.

Sådan som jeg havde forestillet mig det er som dette

<?xml version='1.0' standalone='yes'?>
<settings>
    <webserver>
        <ip>127.0.0.1</ip>
        <port>5050</port>
    <auto>1</auto>
    </webserver>
    <passwords>
        <switch_1>12345678</switch_1>
        <switch_2>12345678</switch_2>
        <switch_3>12345678</switch_3>
        <switch_4>12345678</switch_4>
        <switch_5>12345678</switch_5>
        <switch_6>12345678</switch_6>
        <switch_7>12345678</switch_7>
        <switch_8>12345678</switch_8>
    <pwm_1>12345678</pwm_1>
    <pwm_2>12345678</pwm_2>
    </passwords>
    <limits>
    <pwm_1_min>0</pwm_1_min>
    <pwm_1_max>255</pwm_1_max>
    <pwm_2_min>0</pwm_2_min>
    <pwm_2_max>255</pwm_2_max>
    </limits>
    <timers>
        <switch_1>1000</switch_1>
        <switch_2>1000</switch_2>
        <switch_3>1000</switch_3>
        <switch_4>1000</switch_4>
        <switch_5>1000</switch_5>
        <switch_6>1000</switch_6>
        <switch_7>1000</switch_7>
        <switch_8>1000</switch_8>
    </timers>
    <inverted>
        <switch_1>0</switch_1>
        <switch_2>0</switch_2>
        <switch_3>0</switch_3>
        <switch_4>0</switch_4>
        <switch_5>0</switch_5>
        <switch_6>0</switch_6>
        <switch_7>0</switch_7>
        <switch_8>0</switch_8>
    <pwm_1>0</pwm_1>
    <pwm_2>0</pwm_2>
    </inverted>
</settings>

men er det den rigtige måde at gøre det på? Eller er der en smartere/lettere/mere rigtig måde at stille det op på? Sådan så det måske er nemmere at arbejde med i C#?
Avatar billede arne_v Ekspert
25. december 2009 - 15:27 #1
Umiddelbart ser den XML struktur nem ud at query'e med XPath (eller LINQ to XML).
Avatar billede blod_1 Nybegynder
25. december 2009 - 15:47 #2
Alle tiders, så prøver jeg at gå i krig med det.

Hvis du smider et svar, så kan vi lukke den her :)
Avatar billede arne_v Ekspert
25. december 2009 - 15:51 #3
svar
Avatar billede arne_v Ekspert
25. december 2009 - 15:52 #4
Eneste grund jeg kan se til at vælge et andet format er hvis du skulle vælge at bruge standard app config XML format.
Avatar billede blod_1 Nybegynder
25. december 2009 - 16:01 #5
Hvad ville fordelen være ved det? Eller er det kun for at få det til at se mere rigtigt ud?
Avatar billede arne_v Ekspert
25. december 2009 - 16:08 #6
XML'en ville blive betydeligt grimmere.

Men det ville være et standardiseret format.

Jeg siger ikke at du skal bruge det, men du bør nok bruge 3 minutter på at læse om det og så træffe en beslutning om hvorvidt du synes at det passer til dig eller ej.
Avatar billede blod_1 Nybegynder
25. december 2009 - 16:15 #7
Tror jeg fandt noget om det

Det må jo så blive noget som dette?

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <webserver>
    <add key="ip" value="127.0.0.1"/>
    <add key="port" value="5050"/>
  </webserver>
...
</configuration>
Avatar billede blod_1 Nybegynder
25. december 2009 - 16:19 #8
Giver umiddelbart mere mening at gøre det sådan, så skal jeg bare finde ud af hvordan man læser og skriver sådan noget.

Læste din guide om xml, var egentligt det jeg baserede min første ide med xml på, men kunne være godt nok at lære det her, og så gøre noget som måske er mere rigtigt.
Avatar billede arne_v Ekspert
25. december 2009 - 16:29 #9
Der er et helt namespace i .NET kaldet System.Configuration til at læse den slags filer.

Klassen ConfigurationManager er den man starter med.
Avatar billede blod_1 Nybegynder
25. december 2009 - 16:32 #10
Alle tiders! Det kaster jeg mig over istedet. :)
Avatar billede blod_1 Nybegynder
27. december 2009 - 21:43 #11
Hvor er der nogle eksempler for netop denne måde at gøre det på? Jeg syntes at jeg kan finde snart alt andet når jeg søger efter noget om det.
Avatar billede arne_v Ekspert
27. december 2009 - 22:28 #12
Hej - jeg sagde ikke at det var nemt.

:-)

Men jeg prøver lige at bixe et eksempel.
Avatar billede arne_v Ekspert
27. december 2009 - 22:39 #13
Først med XmlDocument:

<myconfig>
    <vars>
        <foo>123</foo>
        <bar>ABC</bar>
    </vars>
</myconfig>

using System;
using System.Xml;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(@"C:\myconfig.xml");
            int foo = int.Parse(doc.SelectSingleNode("/myconfig/vars/foo/text()").Value);
            string bar = doc.SelectSingleNode("/myconfig/vars/bar/text()").Value;
            Console.WriteLine(foo + " " + bar);
            Console.ReadKey();
        }
    }
}
Avatar billede arne_v Ekspert
27. december 2009 - 22:40 #14
Så med app settings:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="foo" value="123" />
        <add key="bar" value="ABC" />
    </appSettings>
</configuration>

using System;
using System.Configuration;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int foo = int.Parse(ConfigurationManager.AppSettings["foo"]);
            string bar = ConfigurationManager.AppSettings["bar"];
            Console.WriteLine(foo + " " + bar);
            Console.ReadKey();
        }
    }
}
Avatar billede arne_v Ekspert
27. december 2009 - 22:55 #15
Og så kan man hygge sig med en custom section:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="myconfig" type="E.MyConfig,E12"/>
    </configSections>
    <myconfig foo="123" bar="ABC"/>
</configuration>


using System;
using System.Configuration;

namespace E
{
    public class MyConfig : ConfigurationSection
    {
        [ConfigurationProperty("foo")]
        public int Foo { get { return (int)this["foo"]; } }
        [ConfigurationProperty("bar")]
        public string Bar { get { return (string)this["bar"]; } }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            MyConfig cfg = (MyConfig)ConfigurationManager.GetSection("myconfig");
            Console.WriteLine(cfg.Foo + " " + cfg.Bar);
            Console.ReadKey();
        }
    }
}
Avatar billede blod_1 Nybegynder
27. december 2009 - 23:15 #16
Hmm, ja nemt ser det ikke ud til at være :P umiddelbart kan jeg fint  gennemskue hvad der sker i det første eksempel med bare XML, så jeg tror jeg går tilbage til min første ide med xml layoutet, og så senere skifter til den anden måde når jeg kan finde ud af det. (at kunne læse config er pt det eneste som lige står i vejen for at jeg kan få testet det program jeg laver rigtigt :P)
Avatar billede arne_v Ekspert
27. december 2009 - 23:32 #17
app settings er ikke så svær at bruge - custom section er lidt mere tricky
Avatar billede blod_1 Nybegynder
27. december 2009 - 23:36 #18
hehe, svært for mig, men det kommer vel nok på et tidspunkt.
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