Ich lade MusicXML-Dateien in mein Programm. Das Problem: Es gibt zwei „Dialekte“, zeitlich und halb abgetrennte, den unterschiedlichen Wurzelknoten (und eine andere Struktur) haben:Wie differenziere ich XML-Dateitypen vor der Deserialisierung?
<?xml version="1.0" encoding='UTF-8' standalone='no' ?>
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 2.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
<score-partwise version="2.0">
<work>...</work>
...
</score-partwise>
und
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE score-timewise PUBLIC "-//Recordare//DTD MusicXML 2.0 Timewise//EN" "http://www.musicxml.org/dtds/timewise.dtd">
<score-timewise version="2.0">
<work>...</work>
...
</score-timewise>
Mein Code für Deserialisieren die halb abgetrennte Partitur so weit ist:
using (var fileStream = new FileStream(openFileDialog.FileName, FileMode.Open))
{
var xmlSerializer = new XmlSerializer(typeof(ScorePartwise));
var result = (ScorePartwise)xmlSerializer.Deserialize(fileStream);
}
Was wäre der beste Weg, um zwischen den beiden Dialekten zu unterscheiden?
Wie groß sind die XML-Dateien? – EkoostikMartin
Das hängt wirklich vom Stück ab, eine durchschnittliche Motette von Palestrina mit vier Stimmen hat etwa 12000 Zeilen/300 KB. Eine ganze Symphonie wird definitiv mehr haben. –
Okay, ich würde die dritte Zeile der Datei in einen String laden und dann '' String.IndexOf() ''entweder nach Teil oder Zeit suchen, dann weiß man, mit welchem Dateityp man es zu tun hat und kann wählen richtiger Serializer. – EkoostikMartin