C# Deserialisierung

xparet0209

Ensign
Registriert
Okt. 2007
Beiträge
180
Hi CB'ler,

ich habe folgendes Problem: Ich möchte eine Blibliothek für MusicXML in C# schreiben. Dazu muss ich eine solche Datei einlesen können die in XML-Form gegeben ist. Dazu gibt es ein XSD Schema, sodass ich eine Klassen Struktur erstellen könnte.
Nach folgendem Artikel
http://www.codingday.com/xml-c-class-generator-for-c-using-xsd-for-deserialization/

muss ich nur "xsd filename /CLASSES" eingeben und es wird eine .cs Datei für mich erzeugt.
Jedoch erscheinen bei mir nur Fehler wie z.B.:

Schemavalidierungswarnung: Das http://www.w3.org/1999/xlink:href-Attribut wurde
nicht deklariert. Zeile 51, Position 4.
Schemavalidierungswarnung: Das http://www.w3.org/1999/xlink:type-Attribut wurde
nicht deklariert. Zeile 52, Position 4.
Schemavalidierungswarnung: Das http://www.w3.org/1999/xlink:role-Attribut wurde
nicht deklariert. Zeile 53, Position 4.
Schemavalidierungswarnung: Das http://www.w3.org/1999/xlink:title-Attribut wurde
nicht deklariert. Zeile 54, Position 4.
Schemavalidierungswarnung: Das http://www.w3.org/1999/xlink:show-Attribut wurde
nicht deklariert. Zeile 55, Position 4.
Schemavalidierungswarnung: Das http://www.w3.org/1999/xlink:actuate-Attribut wur
de nicht deklariert. Zeile 56, Position 4.
bei der Datei musicxml.xsd und opus.xsd oder:
Warnung: Klassen können nicht generiert werden, da auf höchster Ebene keine Elem
ente mit komplexen Typen gefunden wurden.
bei der Datei xlink.xsd.
Die xsd Dateien kann man hier finden :
http://www.makemusic.com/musicxml/specification/xsd

Wie kommen die Fehler zustande und wie kann ich sie beseitigen,damit ich Klassen aus den xsd Dateien generieren kann?

mfg xparet0209
 
Die Fehlerausgabe lesen und verstehen ;)
Du hast da eine unaufgelöste Referenz.

Code:
xsd xlink.xsd musicxml.xsd /c

Sollte funktionieren.
 
xsd.exe /c musicxml.xsd xlink.xsd geht bei mir.

Du mußt alle schema Dateien, die referenziert werden, mit angeben.


Edit: ups, 2ter :)
 
Oh ich wusste nicht, dass beie Dateien zusammen gepackt werden können. Nun funktionierts. Danke vielmals an die beiden Helfer :)

Wenn ich nun eine MusicXML Datei einlesen möchte, dann muss ich doch einen XML streamreader erstellen, der dann immer weiter ausliest und ich per switch reagieren und abspeichern muss. Oder?
 
Zuletzt bearbeitet:
Etwas in der Art:

XmlTextReader reader = new XmlTextReader(filePath);
XmlSerializer s = new XmlSerializer(typeof(MyGeneratedClass));
MyGeneratedClass _myClass = (MyGeneratedClass)s.Deserialize(reader);
Ergänzung ()

Dann kannst du per

_myClass.object auf die Elemente der XmlDatei zugreifen. Einfach mal ausprobieren (watch).
Da mußt du nicht selber iterieren/switchen...
 
Das ist wirklich praktisch - einfach per Serializer das ganze auszulesen. Nochmals Danke :D
 
Zurück
Oben