• Forum
      /  
    Programmering og webdesign
      /  
    Programmering
  • 02-04-2009 · 08:23 1353 visninger 18 svar
  • Denne tråd er over 6 måneder gammel

    Er du sikker på, at du har noget relevant at tilføje?

  • XML og C#

    Af Jesper Lauridsen Supporter
Hej

Jeg skal have fremstillet en form for versionsstyring.
Det beskrives bedst ved at sammenligne med word.
Når et word2007 dokument skal gemmes som word2003 er der funktionalitet der ikke understøttes og dermed går tabt.

Jeg har nogle filer skrevet i xml. Filen skal konverteres fra version 2 til version 1.
F.eks.

Version 1:


Data



Version 2:


Data2



Hvordan kan man i sin applikation bestemme hvad der skal fjernes for at få version 1?
Og hvordan kan jeg bestemme hvad der skal tilføjes for at gå fra version 1 til version 2?


Jeg er klar over at det er et rimelig abstrakt spørgsmål, og at man skal have hardcodet i applikationen hvilke ændringer der skal foretages.

Jeg har tænkt på at lave en klasse der indeholder disse informationer.
Ændringer:
- Fra 1 til 2 : Root/Device/Command = Data2
- Fra 2 til 1 : Root/Device/Command = Data

Version 2 understøttes kun hvis applikationen er opdateret til at kunne håndtere den.

Skriv hvis der er spørgsmål!

Supporter
02-04-2009 08:26
XML-koden gik ikke så godt :s
Kommer her:
http://filupload.dk/images/524934xm...
Nørd
02-04-2009 08:38
For lige at genbruge mit tidligere spørgsmål på Eksperten:
http://www.eksperten.dk/spm/817451

Til selve erstatningen kan RegEx sandsynligvis være behjælpelig:
http://www.google.com/search?source...
Supporter
02-04-2009 08:51
#2 Tak for svaret, men det er ikke problemet hvordan der arbejdes med XML i C# - det er jeg klar over.
Det er mere hvordan man i applikationen bestemmer hvad der skal fjernes og tilføjes for at gå fra version 1 til version 2 og omvendt.
Nørd
02-04-2009 09:02
#3
Det kan RegEx klare, men det er lidt en kompliceret affære, så du skal nok læse lidt om det først.
Supporter
02-04-2009 09:24
#4 Det kan godt være RegEx er løsningen. Jeg kender lidt til det, men ikke så kompliceret som dette. Så må jeg til at læse :|

Andre der har noget at byde ind med?
C# guru

#6

Gæst
02-04-2009 09:32
Drop regex.

Du skal ikke til at bruge regex. Læs dit dokument som et DOMdocument. Løb det igennem og lav de ændringer du skal. Det er sådan du skal gøre. Det andet er noget ROD!

Det andet er "lettere" at lave. Men det bliver noget rod som du aldrig kan lave om i. Du glemmer hvad der sker, og dine ændringer kommer til at have utilsigtede følger.

http://msdn.microsoft.com/en-us/lib...

Det er den eneste rigtige måde at gøre det på. Pas på med at behandle et XML dokument som en tekststreng. Det er fyfy.
Hav lidt tålmodighed og lær det på den rigtige måde. Du har fået linket til dokumentationen, men det er småt med eksempler hos MS. Brug google til at finde eksempler.
Monster Supporter
02-04-2009 09:40
#0 Mangler måske lidt mere info , men:

Version 2->1:

Det kommer selvfølgelig an på hvordan din XML file er:

1. Hvis strukturen/elementerne er ens (navn), så er det jo let. Så er det bare at læse de elementer, som findes for version 1 og registrere dem, som ikke kunne læses = version 2 unikke elementer, hvilket er let med XmlDocument.

2. Hvis stukturen og elementerne ikke ens, må du vel gå den lange vej og skrive en importer/eksporter for begge versioner. Jeg kunne forestille mig at læsningen foregår til samme data object (?), hvis begge XML filer, skal bruges i samme kontekst i programmet? Så er det bare at registrere, hvilke variable m.v. som bliver indlæst og hvilke, som ikke bliver?
Maxibruger
02-04-2009 09:40
Jeg forstod ikke problemstillingen.

Bestemmer du selv hvilke felter der findes i XML dokumenterne for hver "version"?
Så du ved hvilke felter du har at gøre med, alt efter hvilken version du står med?

Eller ønsker du dynamisk at kunne sammenligne to XML dokumenter, og lave en sammenligning af forskellene?

Jeg forstår ikke formuleringen "Hvordan jeg kan bestemme hvad der skal fjernes/tilføjes for at gå fra version X/Y til version Y/X" ... kan du omformulere den?
Supporter
02-04-2009 09:54
#6 Jeg har også selv googlet lidt med xml og regex sammen og det anbefales ikke jf. http://stackoverflow.com/questions/...
Kigger lige på det, og vender tilbage.

#7 Det er nok punkt 2 der skal bruges, men det skal forstås sådan at der kun findes en fysisk xml-fil, som jeg kan loade ind. Og så afhængig af om brugeren ønsker at arbejde med version 1 eller version 2 skal der tilføjes flere funktioner hvis version 2 vælges - dette skal ske runtime.

#8 Jeg ved til dels hvilke felter der findes, men et element kan dog indeholde x antal childs. Så ja, jeg ønsker at kunne sammenligne XML dokumenterne.
Supporter
02-04-2009 10:12
#8
Omformulering: Jeg laver en klasse med en funktion der kan gå fra version 1 til 2 og en funktion der kan gå fra version 2 til 1.

Dvs. i forhold til den stump XML jeg har skrevet skal værdien i denne xPath: Root/Device/Command ændres fra "Data" til "Data2" hvis man ønsker en version 2.
Og Root/Device/Command ændres fra "Data2" til "Data".
OVRKLL

#11

Nørd
02-04-2009 10:28
#6

Hmm... En gæst kommer dumpende med navnet 'C# guru' og emailadressen 'dillar@daller.dk' og underkender anvendelsen af RegEx - hvor troværdigt :)

Anyway, du har ret; jeg havde ikke overvejet, at XML-strukturen er så gennemført, at RegEx er overflødigt.
Arnbak

#12

Ultra Nørd
02-04-2009 10:30
#10 måske MS's XML Power Tools, herunder XML Diff. http://msdn.microsoft.com/en-us/lib... er passende i din problem stilling?
Supporter
02-04-2009 10:41
#12 Yes sir! Tror det er noget i retning af det jeg leder efter. Kigger lige på det!
Supporter
02-04-2009 11:05
#12 Nu har jeg kigget lidt på det, og det er ikke helt som jeg ønsker det, men kan se der vist ikke er nogen let løsning på problemet...

Tak for svar alle!
Megabruger
02-04-2009 12:25
#11

Det er vel lige så - eller mere - troværdigt, som dine input i #2+4.
Han har ret i at det er uklogt at betragte XML som tekst. Jeg forstår ikke bruger/gæst problematikken... Han siger noget mere klogt end andre i tråden, men skal alligevel li' ha' et stik for at være gæst.
OVRKLL

#16

Nørd
02-04-2009 13:14
#15
Jeg pointerede bare, at det er lidt inkongruent, at han tog sig tid til at skrive 10 linjers svar på spørgsmålet, kalder sig selv guru og alligevel foretrækker at forblive anonym og endda bruger en yderst useriøs fake mail... Men det må han jo selv om.
Arnbak

#17

Ultra Nørd
02-04-2009 13:44
#16 hvorfor forholder du dig ikke bare til indholdet i stedet? Nu gør du dig jo selv til grin..
OVRKLL

#18

Nørd
02-04-2009 15:35
#17
Jeg har aldrig påtvunget dig at dele mine holdninger, og der er ikke meget mere at sige om origo, så lad da tråden ligge?
Bruger påkrævet
En bruger er påkrævet for at oprette svar på Hardwareonline.dk
Du kan oprette en bruger her eller logge ind her

Log ind for at få flere funktioner