mboost-dp1

XML Serializering af "alternative" XML opbygninger


Gå til bund
Gravatar #1 - ghostface
25. feb. 2010 12:38
Jeg har fået serveret en opgave på arbejde idag som virker til at være "i stykker" (af mangel på bedre ord)

Grundliggende så er der en XML struktur (som i øvrigt er ISO certificeret...) som indeholder elementer i en struktur jeg altid har set som forkert hvilket også afspejler sig når jeg forsøger at serialisere XMLen.

Grundliggende ser strukturen ud som følger:

<root>
<element1>
<gco:CharacterString>noget tekst</CharacterString>
</element1>
<descriptiveKeywords>
<keywords>
<keyword>
<gco:CharacterString>asd</gco:CharacterString>
</keyword>
<keyword>
<gco:CharacterString>dsa</gco:CharacterString>
</keyword>
<keyword>
<gco:CharacterString>asd</gco:CharacterString>
</keyword>
</keywords>
</descriptiveKeywords>
<descriptiveKeywords>
<keywords>
<keyword>
<gco:CharacterString>sdsa</gco:CharacterString>
</keyword>
<keyword>
<gco:CharacterString>asdd</gco:CharacterString>
</keyword>
<keyword>
<gco:CharacterString>asdasw</gco:CharacterString>
</keyword>
</keywords>
</descriptiveKeywords>
<descriptiveKeywords>
<keywords>
<keyword>
<gco:CharacterString>asdas</gco:CharacterString>
</keyword>
</keywords>
</descriptiveKeywords>
</root>

som i kan se er her i mit (selv opfundne) eksempel har descriptiveKeywords ikke noget rod element som holder styr på dem. Det er altså bare en række fritstående klasser som ikke er i nogen liste.

Hvordan i alverden skal jeg kunne serialisere dette? Min kode behøver ikke afspejle XML strukturen (det kan den jo af gode grunde ikke) men kan jeg have en liste i min kode som når det serialiseres ikke skriver listen med men kun indholdet?

Mit projekt er i C#.

Det virker meget underligt for mig at det kan blive iso certificeret.
Gravatar #2 - milandt
25. feb. 2010 12:42
Kunne det ikke tænkes at dette er problemet:

<gco:CharacterString>noget tekst</CharacterString>

og evt. manglende definition af gco namespace.

Ud over det ser XML'en vel fin nok ud? Et element må gerne gentage sig, ligesom <keyword> gør i elementet <keywords>
Gravatar #3 - Mamad (moveax1ret)
25. feb. 2010 12:45
jeg prøvede lige at smide dit xml igennemmen xml spy for at formatere det så det blev overskueligt at se på, og fik en besked

"End tag must not have name 'CharacterString'"
"Reason: its name must match start tag 'gco:CharacterString'"

efter jeg rettede det studsede jeg over at xml encoding og version ikke var sat, f.eks. sådan her:

<?xml version="1.0" encoding="utf-8"?>

dernæst undrer jeg mig over hvorfor at gco namespacet ikke er deklæret...... er du nu sikker på at det data du har overfylder den xsd der defineres i isoen?
Gravatar #4 - Mamad (moveax1ret)
25. feb. 2010 12:50
udover det er der ikke noget galt med xml strukturen- intet der "hænger" som du siger.

Hvis jeg skulle serializere det ville jeg bruge XSD.EXE værktøjet fra microsoft til at generere et xsd dokument der beskriver xml filen hvis du ikke har et xsd.
Så ville jeg rette den autogenerede xsd fil til at reflektere de ting der ikke kan gættes.

Så ville jeg bruge xsd.exe til at autogenerere c# klasser der reflekterer xml strukturen.

Så ville jeg kigge på msdn efter eksempler på serialisering af xml filer med xsd.exe, og bruge dem som udgangspunkt.
Gravatar #5 - ghostface
25. feb. 2010 12:53
det er et håndskrevet eksempel. Der er styr på namespaces.


Hvordan vil i lave en klasse ud af mit eksempel der?

DescriptiveKeywords kan der være 0 til mange af. Når de ikke er en del af en liste i XML strukturen skal de vel heller ikke være det i den klasse jeg laver.

dvs klassen Root skal have 0 til mange refferencer til DescriptiveKeywords uden brug af en liste. Det kan da ikke lade sig gøre.

Lig mærke til at "keyword" netop er fremstillet korrekt på descriptiveKeywords idet de er samlet i listen "keyword". descriptiveKeywords har dog ikke en sådan liste der holder står på dem. De svæver på lige fod med element1 som godt må stå elene da der kun er 1 af dem. Der kan ikke være flere.
Gravatar #6 - myplacedk
25. feb. 2010 13:39
ghostface (5) skrev:
dvs klassen Root skal have 0 til mange refferencer til DescriptiveKeywords uden brug af en liste.

DescriptiveKeywords er vel en liste.

I din root-klasse (i Java):

public DescriptiveKeywords[] getDescriptiveKeywords();

eller

public List<DescriptiveKeywords> getDescriptiveKeywords();

men

public element1 getElement1();
Gravatar #7 - Mamad (moveax1ret)
25. feb. 2010 14:12
#5
http://msdn.microsoft.com/en-us/library/x6c1kb0s%2...

lær xsd, og brug det værktøj.........
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login