Unterschied zwischen ParseError und ValidationError !?

15/05/2008 - 09:06 von marcus ohm | Report spam
Hallo zusammen,

ich habe mein Problem mit der Validierung von XML-Strings anhand eines XML
Schema weitgehend lösen können. Zumindest funktioniert die Validierung, wenn
das XML Schema im XML-String korrekt angegeben ist.

Kann die angegebene .xsd datei allerdings nicht gefunden werden, kommt es zu
einem Verhalten, welches nicht mit den Angaben in der MSDN übereinstimmen.

Folgendes passiert:
- das XMLDocument wurde erzeugt (DOMDocument40) und die folgenden Properties
wurden gesetzt
hr = pXmlDoc->put_async(VARIANT_FALSE);
hr = pXmlDoc->put_validateOnParse(VARIANT_TRUE);
hr = pXmlDoc->put_resolveExternals(VARIANT_TRUE);
hr = pXmlDoc->put_preserveWhiteSpace(VARIANT_TRUE);

Nach Aussage in der MSDN führt resolveExternals=TRUE dazu, dass die
angegebene .xsd Datei aufgelöst und zur Validierung herangezogen wird. Kann
diese Datei nicht aufgelöst werden, da z.B. ein falscher Pfad oder Dateiname
angegeben wurde, sollte nach der MSDN ein Validation-Error auftreten.

Zitat:

If externals cannot be resolved during validation, a validation error occurs.
(siehe: http://msdn.microsoft.com/en-us/library/ms762283(VS.85).aspx)

Dieses ist aber nicht der Fall. Die Methode loadXML() endet mit S_OK und im
parseError ist kein Fehler gespeichert.

Nun die Frage: Gibt es hier einen Unterschied zwischen ParseError und
ValidationError und wenn ja, wie kann der ValidationError abgefangen werden?
Oder liegt das Problem woanders?

Es ist für mich alles ziemlich neu, da ich das erste Mal mit MSXML unter
VisualC++ arbeite (VS2005 SP1, MFC8, msxml2.lib). Vielleicht habe ich etwas
übersehen.

Ich hoffe auf nochmalige schnelle Hilfe und bedanke mich im Voraus.

Grüße
Marcus Ohm
 

Lesen sie die antworten

#1 Martin Honnen
15/05/2008 - 15:37 | Warnen spam
marcus ohm wrote:

Nach Aussage in der MSDN führt resolveExternals=TRUE dazu, dass die
angegebene .xsd Datei aufgelöst und zur Validierung herangezogen wird. Kann
diese Datei nicht aufgelöst werden, da z.B. ein falscher Pfad oder Dateiname
angegeben wurde, sollte nach der MSDN ein Validation-Error auftreten.

Zitat:

If externals cannot be resolved during validation, a validation error occurs.
(siehe: http://msdn.microsoft.com/en-us/library/ms762283(VS.85).aspx)

Dieses ist aber nicht der Fall. Die Methode loadXML() endet mit S_OK und im
parseError ist kein Fehler gespeichert.



Das kann ich für MSXML 4 und 6 und XSD-Schema so bestàtigen.

Nun die Frage: Gibt es hier einen Unterschied zwischen ParseError und
ValidationError und wenn ja, wie kann der ValidationError abgefangen werden?



Meines Wissens werden alle Fehler über parseError berichtet.
Bist du auf xsi:schemaLocation/xsi:noNamespaceSchemaLocation angewiesen?
Wenn dir das Schema oder die Schemata vorher bekannt sind, kannst du
diese auch separat laden und gegen diese validieren. Benutze dazu
XmlSchemaCache und die schemas-Eigenschaft des DOM-Dokumentes.




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

Ähnliche fragen