Nochmal Validierung VB 2005 XML und XSD

11/12/2007 - 10:38 von Klaus Gollin | Report spam
Liebe Newsgroup-Leser,

ich habe da ein Problem: ich arbeite mit einer im Internet gespeicherten
Schemadatei (XSD) und einer lokalen XML Datei. Die Header der beiden Dateien
wie folgt:

XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" >
...

XML:
<?xml version="1.0" encoding="UTF-8"?>
<Übertragung xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.myhomepage.de/namespace/my.xsd" >
...

Beide Dateien sind wohlgeformt. Die XML Datei kann z.B. mit XML Notepad
fehlerfrei und zweifelsfrei gegen das im Internet gespeicherte Schema
validiert werden.

Nun versuche ich die Validierung in meinem Programm wie folgt:

Dim xmlRdr As XmlReader
Dim xmlSettings As New XmlReaderSettings()
Dim XMLSchemaAufzàhlung As XmlSchemaSet = New XmlSchemaSet()
Dim xs As New XmlSchema

XMLSchemaAufzàhlung.Add("http://www.myhomepage.de/namespace",
"http://www.myhomepage.de/namespace/my.xsd")

AddHandler xmlSettings.ValidationEventHandler, AddressOf
ValidationCallBack

xmlSettings.ValidationType = ValidationType.Schema
xmlSettings.ValidationFlags = xmlSettings.ValidationFlags Or _

XmlSchemaValidationFlags.ReportValidationWarnings
xmlSettings.Schemas.Add(XMLSchemaAufzàhlung)

xmlRdr = XmlReader.Create(strDatei, xmlSettings)

Try
While xmlRdr.Read()
End While
xmlRdr.Close()
Return True
Catch
xmlRdr.Close()
Return False
End Try

Das Problem: egal, ob die XML Datei fehlerhaft ist oder nicht - ich bekomme
keine Exception.

Ich vermute das Problem beim Namespace, den ich bei der Instanziierung von
XMLSchemaAufzàhlung mit dem entsprechenden Konstruktor mitgebe.

Kann mir jemand verraten, wie ich VB dazu bringe, die Validierung
durchzuführen, ohne den Namespace anzugeben?

Vielen Dank für Eure Hilfe

Klaus
 

Lesen sie die antworten

#1 Martin Honnen
11/12/2007 - 13:58 | Warnen spam
Klaus Gollin wrote:

XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" >



Hat das Schema ein targetNamespace-Attribut? Wenn ja, welches genau?


Dim xmlRdr As XmlReader
Dim xmlSettings As New XmlReaderSettings()
Dim XMLSchemaAufzàhlung As XmlSchemaSet = New XmlSchemaSet()
Dim xs As New XmlSchema

XMLSchemaAufzàhlung.Add("http://www.myhomepage.de/namespace",
"http://www.myhomepage.de/namespace/my.xsd")



Das erste Argument zu Add kann einfach Nothing sein, siehe
<URL:http://msdn2.microsoft.com/en-us/li....aspx>, dann wird
einfach der Namensraum verwendet, der im Schema definiert ist.

AddHandler xmlSettings.ValidationEventHandler, AddressOf
ValidationCallBack

xmlSettings.ValidationType = ValidationType.Schema
xmlSettings.ValidationFlags = xmlSettings.ValidationFlags Or _

XmlSchemaValidationFlags.ReportValidationWarnings
xmlSettings.Schemas.Add(XMLSchemaAufzàhlung)

xmlRdr = XmlReader.Create(strDatei, xmlSettings)

Try
While xmlRdr.Read()
End While
xmlRdr.Close()
Return True
Catch
xmlRdr.Close()
Return False
End Try

Das Problem: egal, ob die XML Datei fehlerhaft ist oder nicht - ich bekomme
keine Exception.



Eine Exception wird es nicht geben, da ja ein ValidationEventHandler
gesetzt ist, der aber sollte Warnungen und Fehler ausgeben.



Martin Honnen MVP XML
http://JavaScript.FAQTs.com/

Ähnliche fragen