Anmäl dig till Roborock Challenge!
Permalänk

XML och C#

Jag är inte supervan med att greja med XML-dokument i C# och jag drar mig för det varje gång. För mig är det trial and error vilka funktioner man ska använda för att få till det man vill ha.
Jag ska peta i en app.config fil här i ett experimentprojekt.
Den xml'en ser ut så här
<configuration>
<configSections></configSections>
<system.Diagnostics></system.Diagnostics>
<system.net></system.net>
<userSettings>
<Blabla.My.MySettings>
<setting name="MIN_PARAMETER" serializeAs="String">
<value>-1</value>
</setting>
<setting name="Blabla" serializeAs="String">
<value>hej</value>
</setting>
etc..
</userSettings>
etc etc.

Jag vill kunna läsa ut "MIN_PARAMETER" d.v.s "value" på den (men även ha möjlighet att redigera value och spara till nytt xml-dokument). Finns det nått riktigt enkelt sätt att göra detta? Jag har vänt upp och ner på Google känns det som men inte hittat det resultat jag ville ha (eller så har jag bara gjort fel ).
Tar tacksamt emot tips.

Visa signatur

Dator: MB: Gigabyte B760 Gaming X | SSD: Samsung 990 Pro M.2 1TB + Crucial P3 M.2 1TB CPU: Intel Core i7 14700 2.1 GHz 61MB | RAM: Corsair 32GB (2x16GB) DDR5 4800MHz CL40 Vengean | Grafikkort: ASUS Dual GeForce RTX 4060 EVO 8GB OC | Chassi: be quiet! Pure Base 600 Silver | PSU: Corsair RM750e ATX 3.0 750W V3 | Optisk: ASUS BW-12B1ST Blu-Ray/DVD brännare | CPU-kylare: Thermalright Peerless Assassin 120 SE | Operativ: Windows 11 | Scanner: Canon Canoscan 9000F
Övrigt: Nintendo Switch, NES Mini, SNES Mini, Nintendo New 3DS, NES, Famicom AV, PS3, PS5, AppleTV 4K, Synology NAS DS923+ (32GB), iPhone 16 Pro 128GB, LG OLED 55C2,

Permalänk
Medlem

För att jobba med XML dokument generellt finns XMLDocument-klassen: https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmldoc...

just app.config är ju appens konfiguration vilket man kan hantera via dom funktionerna.
https://docs.microsoft.com/en-us/troubleshoot/developer/visua...

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Medlem

Personligen föredrar jag att använda XDocument för att arbeta med XML i .NET

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem

För att läsa ur din app.config bör du kunna använda ConfigurationManager.

https://docs.microsoft.com/en-us/dotnet/api/system.configurat...

Tror visserligen att app.configen behöver se ut som som i länken (vilket jag gissar även är rekommenderat).

Permalänk

Jag var nog inte tydlig nog. Det är inte appens egna app.config jag ska peta i utan från ett annat ställe, så jag antar det får hanteras som ett vanligt xml-dokument.

Visa signatur

Dator: MB: Gigabyte B760 Gaming X | SSD: Samsung 990 Pro M.2 1TB + Crucial P3 M.2 1TB CPU: Intel Core i7 14700 2.1 GHz 61MB | RAM: Corsair 32GB (2x16GB) DDR5 4800MHz CL40 Vengean | Grafikkort: ASUS Dual GeForce RTX 4060 EVO 8GB OC | Chassi: be quiet! Pure Base 600 Silver | PSU: Corsair RM750e ATX 3.0 750W V3 | Optisk: ASUS BW-12B1ST Blu-Ray/DVD brännare | CPU-kylare: Thermalright Peerless Assassin 120 SE | Operativ: Windows 11 | Scanner: Canon Canoscan 9000F
Övrigt: Nintendo Switch, NES Mini, SNES Mini, Nintendo New 3DS, NES, Famicom AV, PS3, PS5, AppleTV 4K, Synology NAS DS923+ (32GB), iPhone 16 Pro 128GB, LG OLED 55C2,

Permalänk
Medlem

XmlDocument och XDocument går visserligen att använda, men jag tycker båda är onödigt krångliga i de flesta fall.

Det enklaste är oftast att bygga eller generera en klass som motsvarar dokumentet och använda XmlSerializer eller någon annan serialiseringsklass för att deserialisera från XML till objekt eller serialisera från objekt till XML.

Om man har ett XML schema (.xsd) som beskriver dokumentet kan man generera klassen på ett otvetydigt sätt med xsd.exe. Jag har för mig att xsd.exe kan ta en exempel-XML som input och generera en klass. Då gäller det att ha ett komplett exempel.

Oavsett vilken variant man väljer är det ofta XML namespaces som krånglar. Din fil tycks använda default-namespacet och då slipper du det problemet.

Edit: xsd.exe genererar förstås en klasshierarki, inte en klass. Jag tror den genererar partials, så det är enkelt att lägga till egna metoder, till exempel de/serialiseringskoden eller parsningen av strängar till andra datatyper som du tycks behöva göra i det generella fallet. Om schemat kan ändras kan det dock vara mer lämpligt att hantera dokumentet som en glorifierad sträng, med till exempel XDocument, eftersom du kommer få problem med deserialiseringen om okända XML-element tillkommer.

Permalänk
Medlem

Håller med @KAD

Först genererar du en klass för XML filen, detta gör du enklas genom att kopiera hela XML filens innehåll sedan går du till Visual studio Edit --> Paste Special --> Paste XML As Classes. Detta kommer att generarea nödvändiga klasser åt dig. Du kan behöva att ändra typer beronde på hur du vill ha det.

När klasserna är på plats kan du göra något i stil med nedan, väldigt enkelt och smidigt att jobba med.

exempel

Sedan kan du accessa dem som vilken property som helst.

Permalänk

Tack, ska spana in! Tar gärna emot fler tips ifall nån sitter på några guldkorn.

Visa signatur

Dator: MB: Gigabyte B760 Gaming X | SSD: Samsung 990 Pro M.2 1TB + Crucial P3 M.2 1TB CPU: Intel Core i7 14700 2.1 GHz 61MB | RAM: Corsair 32GB (2x16GB) DDR5 4800MHz CL40 Vengean | Grafikkort: ASUS Dual GeForce RTX 4060 EVO 8GB OC | Chassi: be quiet! Pure Base 600 Silver | PSU: Corsair RM750e ATX 3.0 750W V3 | Optisk: ASUS BW-12B1ST Blu-Ray/DVD brännare | CPU-kylare: Thermalright Peerless Assassin 120 SE | Operativ: Windows 11 | Scanner: Canon Canoscan 9000F
Övrigt: Nintendo Switch, NES Mini, SNES Mini, Nintendo New 3DS, NES, Famicom AV, PS3, PS5, AppleTV 4K, Synology NAS DS923+ (32GB), iPhone 16 Pro 128GB, LG OLED 55C2,