Hallo,
Wenn ich ein (absichtlich fehlerhaftes) XML-Document mit einem "validation engine" meiner Wahl (hier XML validator von Liquid Technologies) bekomme ich folgende Information :
parseError.errorCode : -1072897687
parseError.filepos : 834
parseError.line : 27
parseError.linepos : 21
parseError.reason : 'P' verstößt gegen enumeration-Einschränkung von 'I V N'.
Analyse des Elements '{http://xxxx.com/ns/Export}vm_artverfp3' mit dem Wert 'P' fehlgeschlagen.
parseError.srcText : <vm_artverfp3>P</vm_artverfp3>
parseError.url : file:///d://XMLVALIDATE/XML/VerfahrenSchnittstelle.xml
In VB6 möchte ich auch auf diese Information zugreifen. Dafür benutze ich ein IXMLDOMParseError-Object (msxml4.dll)
Die Mitglieder von IXMLDOMParseError sind :
.errorCode
.filepos
.Line
.linepos
.reason
.srcText
.url
Wenn die Validierung nicht erfolgreich ist, kann ich .errorCode und .reason lesen. Alle andere Mitglieder bleiben hartnäckig leer oder 0. Ich möchte aber gerne den Wert von srcText interpretieren können.
Dim objSchemas As MSXML2.XMLSchemaCache40
Dim objXML As MSXML2.DOMDocument40
Dim objXSD As MSXML2.DOMDocument40
Dim objErr As MSXML2.IXMLDOMParseError
' XML validieren
Set objErr = objXML.Validate()
If objErr.errorCode = 0 Then
' ERFOLGREICH
Else
' FEHLER
Debug.Print objErr.errorCode
Debug.Print objErr.reason
Debug.Print objErr.filepos
Debug.Print objErr.Line
Debug.Print objErr.linepos
Debug.Print objErr.reason
Debug.Print objErr.srcText
Debug.Print objErr.url
End If
Weiß jemand warum es so ist ?
danke im Voraus
2007-09-03 - Es hat sich erledigt :
Folgendes Beispiel hatte ich gefunden :
' load XML file (without validation - that comes later)
Set objXML = New MSXML2.DOMDocument40
objXML.async = False
objXML.validateOnParse = False
objXML.resolveExternals = False
' load XML, without any validation
If Not objXML.Load(strXMLPath) Then
Err.Raise 1, "Validate", "Load XML failed: " & objXML.parseError.reason
End If
' bind Schema Cache to DOM
Set objXML.schemas = objSchemas
' does this XML measure up?
Set objErr = objXML.Validate()
' any good?
If objErr.errorCode <> 0 Then
Debug.Print objErr.errorCode
Debug.Print objErr.reason
' werden nicht angezeigt
Debug.Print objErr.filepos
Debug.Print objErr.Line
Debug.Print objErr.linepos
Debug.Print objErr.reason
Debug.Print objErr.srcText
Debug.Print objErr.url
End If
Dieses Beispiel ist OK - hat aber als Nebeneffekt, daß nur .errorCode und .reason zu sehen sind.
Folgende Methode funktioniert (so weit ich es testen konnte) besser :
' XML Object
Set objXML = New MSXML2.DOMDocument50
' XML laden
objXML.async = False
objXML.validateOnParse = True
objXML.resolveExternals = True
If Not objXML.Load(strXMLPath) Then
' FEHLER
Debug.Print "errorCode " & objXML.parseError.errorCode
Debug.Print "reason " & objXML.parseError.reason
Debug.Print "filepos " & objXML.parseError.filepos
Debug.Print "Line " & objXML.parseError.Line
Debug.Print "linepos " & objXML.parseError.linepos
Debug.Print "srcText " & objXML.parseError.srcText
Debug.Print "url " & objXML.parseError.url
Else
MsgBox "Keinen Fehler"
End If
Wenn ich ein (absichtlich fehlerhaftes) XML-Document mit einem "validation engine" meiner Wahl (hier XML validator von Liquid Technologies) bekomme ich folgende Information :
parseError.errorCode : -1072897687
parseError.filepos : 834
parseError.line : 27
parseError.linepos : 21
parseError.reason : 'P' verstößt gegen enumeration-Einschränkung von 'I V N'.
Analyse des Elements '{http://xxxx.com/ns/Export}vm_artverfp3' mit dem Wert 'P' fehlgeschlagen.
parseError.srcText : <vm_artverfp3>P</vm_artverfp3>
parseError.url : file:///d://XMLVALIDATE/XML/VerfahrenSchnittstelle.xml
In VB6 möchte ich auch auf diese Information zugreifen. Dafür benutze ich ein IXMLDOMParseError-Object (msxml4.dll)
Die Mitglieder von IXMLDOMParseError sind :
.errorCode
.filepos
.Line
.linepos
.reason
.srcText
.url
Wenn die Validierung nicht erfolgreich ist, kann ich .errorCode und .reason lesen. Alle andere Mitglieder bleiben hartnäckig leer oder 0. Ich möchte aber gerne den Wert von srcText interpretieren können.
Dim objSchemas As MSXML2.XMLSchemaCache40
Dim objXML As MSXML2.DOMDocument40
Dim objXSD As MSXML2.DOMDocument40
Dim objErr As MSXML2.IXMLDOMParseError
' XML validieren
Set objErr = objXML.Validate()
If objErr.errorCode = 0 Then
' ERFOLGREICH
Else
' FEHLER
Debug.Print objErr.errorCode
Debug.Print objErr.reason
Debug.Print objErr.filepos
Debug.Print objErr.Line
Debug.Print objErr.linepos
Debug.Print objErr.reason
Debug.Print objErr.srcText
Debug.Print objErr.url
End If
Weiß jemand warum es so ist ?
danke im Voraus
2007-09-03 - Es hat sich erledigt :
Folgendes Beispiel hatte ich gefunden :
' load XML file (without validation - that comes later)
Set objXML = New MSXML2.DOMDocument40
objXML.async = False
objXML.validateOnParse = False
objXML.resolveExternals = False
' load XML, without any validation
If Not objXML.Load(strXMLPath) Then
Err.Raise 1, "Validate", "Load XML failed: " & objXML.parseError.reason
End If
' bind Schema Cache to DOM
Set objXML.schemas = objSchemas
' does this XML measure up?
Set objErr = objXML.Validate()
' any good?
If objErr.errorCode <> 0 Then
Debug.Print objErr.errorCode
Debug.Print objErr.reason
' werden nicht angezeigt
Debug.Print objErr.filepos
Debug.Print objErr.Line
Debug.Print objErr.linepos
Debug.Print objErr.reason
Debug.Print objErr.srcText
Debug.Print objErr.url
End If
Dieses Beispiel ist OK - hat aber als Nebeneffekt, daß nur .errorCode und .reason zu sehen sind.
Folgende Methode funktioniert (so weit ich es testen konnte) besser :
' XML Object
Set objXML = New MSXML2.DOMDocument50
' XML laden
objXML.async = False
objXML.validateOnParse = True
objXML.resolveExternals = True
If Not objXML.Load(strXMLPath) Then
' FEHLER
Debug.Print "errorCode " & objXML.parseError.errorCode
Debug.Print "reason " & objXML.parseError.reason
Debug.Print "filepos " & objXML.parseError.filepos
Debug.Print "Line " & objXML.parseError.Line
Debug.Print "linepos " & objXML.parseError.linepos
Debug.Print "srcText " & objXML.parseError.srcText
Debug.Print "url " & objXML.parseError.url
Else
MsgBox "Keinen Fehler"
End If
Zuletzt bearbeitet: