XML Validierung mittels XmlSchemaSet
-
Samstag, 16. Februar 2013 18:18
Hallo,
ich habe eine Frage zur XML Validierung mithilfe von XmlSchemaSet. Ich verwende die Methode
XmlSchemaSet.Add(String, String)
um den Namensraum und die Schema-Datei dem XmlSchemaSet hinzuzufügen. Die Schema-Datei muss dann mit dem Programm mitgeliefert werden. Um das zu umgehen, habe ich versucht, die Schema-Datei als eine Datei-Resource einzubinden und dann über
XmlSchemaSet.Add(String, My.Resources.SchemaFile)
dem XmlSchemaSet hinzuzufügen. Ich erhalte allerdings folgende Fehlermeldung:
Illegales Zeichen im Pfad.
Kann man überhaupt eine Schema-Datei, die als Resource eingebunden ist, dem XmlSchemaSet hinzufügen?
Schöne Grüße,LittleBlueBird
Alle Antworten
-
Samstag, 16. Februar 2013 19:33
Hallo,
mir fällt da nur der Weg der vorherigen Entpackung der SchemaFile und anschließender zuweisung.Ich nehme mal an das VS deine Schema-Datei als Textdatei betrachtet und du deswegen den Inhalt der Datei bekommst, wenn du mittels My.Resources.SchemaFile auf die Datei drauf zugreifst.
Zum entpacken. Hier mal ein wahrscheinlich funktionierender Code. Ich lege das Schema direkt unter C: ab, wahrscheinlich sind andere Ordner besser dafür geeignet.
Dim content As String = My.Resources.SchemeFile Dim path As String = "C:\scheme.xsd" File.WriteAllText(path, content)
XmlSchemaSet.Add("", path)Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
- Als Antwort markiert LittleBlueBird Samstag, 16. Februar 2013 21:14
-
Samstag, 16. Februar 2013 21:12
Hallo Koopakiller,
vielen Dank für Deinen Vorschlag. Das wäre eine verwendbare Lösung. Mich stört es aber, dass ich die Schema-Datei zuerst auf die Platte schreibe, um sie dann wieder einzulesen. Darüber hinaus muss ich die Datei dann wieder löschen, sonst könnte ich sie ja auch mitliefern.
Nach langem Suchen habe ich eine meines Erachtens elegantere Lösung gefunden. Ich binde dazu die Schema-Datei in mein Projekt ein und setze dann "Build Action" auf "Embedded Resource". Der nötige Code zum Abrufen der Resource ist unten zu sehen:
Dim schemaSet As New XmlSchemaSet Dim schemaStream As Stream = Me.GetType().Assembly.GetManifestResourceStream("DefaultNamespace.Filename.xsd") Using schemaReader As XmlReader = XmlReader.Create(schemaStream) schemaSet.Add(targetNamespace, schemaReader) End UsingDer Vorteil dabei ist, dass alles im Speicher abläuft und daher viel schneller ist.
Schönen Gruß,
LittleBlueBird
- Als Antwort markiert LittleBlueBird Samstag, 16. Februar 2013 21:13

