Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
XSD Validierung deutlich gesprächiger machen
Seikilos
myCSharp.de - Member



Dabei seit:
Beiträge: 759

Themenstarter:

XSD Validierung deutlich gesprächiger machen

beantworten | zitieren | melden

Ich generiere XML Daten und muss auf der XSD Ebene eine Validierung durchführen.

Gängige Techniken wie XmlDocument.Validate, XDocument.Validate und XmlReader mit einem ValidationEventHandler sehen alle recht ähnlich aus:


public void Validate()
{
  var schemas = new XmlSchemaSet();
  schemas.Add("", fullXsdPath);
  var doc = XDocument.Load(metaXmlFile);
  doc.Validate(schemas,ValidationEventHandler);
}

public void ValidationEventHandler(object sender, ValidationEventArgs e)
        {
            switch (e.Severity)
            {
                case XmlSeverityType.Error:
                    Console.WriteLine("Error: {0}", e.Message);
                    break;
                case XmlSeverityType.Warning:
                    Console.WriteLine("Warning {0}", e.Message);
                    break;
            }

        }

liefern aber sehr magere Ergebnisse aus.
Ich bekomme Meldungen wie
Fehler
The 'name' attribute is invalid - The value '' is invalid according to
its datatype 'NonEmptyStringNoWhitespacesAtBeginningAndEnd' - The
Pattern constraint failed.

Diese Meldung hilft mir jedoch nicht weiter, weil es weder den XML Kontext im Sinne von ein paar Zeilen XML um die Stelle herum zeigt noch eine Zeile oder ähnliches ausgibt, wo ich gucken muss.

Die XML kann sehr groß werden und nicht alle "name" attribute sind obligatorisch. Bestimmte Typen können einen Leerstring haben, usw. Aus dieser Meldung ist nicht sehr leicht ableitbar, wo das Problem ist.

Notepad++ mit den XML Tools liefert mir diesbezüglich folgende Ausgabe
Fehler
ERROR: Element 'LightSource', attribute 'name': [facet 'minLength'] The value '' has a length of '0'; this underruns the allowed minimum length of '1'.
ERROR: Element 'LightSource', attribute 'name': [facet 'pattern'] The value '' is not accepted by the pattern '.*\S'.
ERROR: Element 'LightSource', attribute 'name': '' is not a valid value of the atomic type 'NonEmptyStringNoWhitespacesAtBeginningAndEnd'.

Damit kann man deutlich mehr anfangen, auch wenn die Antwort sehr technisch ist, so ist doch zumindest das Element zu sehen.

Gibt es einen Weg, wie man deutlich mehr Informationen durch die C# Validierungen bekommen kann?
Life is a short
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4182

beantworten | zitieren | melden

Hallo,

in den Eigenschaften e.Exception.LineNumber und e.Exception.LinePosition stehen Zeile und Spalte.
Ich habe mir den Fehlerstring so zusammengesetzt:


string errorMessage = string.Format(
                       "Xml validation failed against schema: '{0}', Message: {1}, Severity: {2}, Line: {3}, Position: {4}",
                       uriXsd, e.Message, e.Severity, e.Exception.LineNumber, e.Exception.LinePosition);
private Nachricht | Beiträge des Benutzers
Seikilos
myCSharp.de - Member



Dabei seit:
Beiträge: 759

Themenstarter:

beantworten | zitieren | melden

Ich muss sagen, ich bin irritiert.
Ich habe diese Werte bereits im Debugger betrachtet und sie waren damals immer 0 und 0.

Wahrscheinlich habe ich zu dem Zeitpunkt ein in-memory XML mit dem XDocument validiert, klar dass es dort keine Zeilen geben kann.

Danke.
Life is a short
private Nachricht | Beiträge des Benutzers
Seikilos
myCSharp.de - Member



Dabei seit:
Beiträge: 759

Themenstarter:

beantworten | zitieren | melden

Was mir gerade auffällt, ein Teil der Frage ist noch offen, ob man bei Verletzung von Constraints mehr Details bekommen kann.
Fehler
The 'name' attribute is invalid - The value '' is invalid according to
its datatype 'NonEmptyStringNoWhitespacesAtBeginningAndEnd' - The
Pattern constraint failed.
Erfordert einen Blick in die XSD um genau sagen zu können, was fehlgeschlagen ist. auch wenn der lange Name versucht es bereits auszudrücken.

Der XML Parsers von Notepad++ ist wesentlich Aussagekräftiger:
Fehler
ERROR: Element 'LightSource', attribute 'name': [facet 'minLength'] The value '' has a length of '0'; this underruns the allowed minimum length of '1'.
ERROR: Element 'LightSource', attribute 'name': [facet 'pattern'] The value '' is not accepted by the pattern '.*\S'.
ERROR: Element 'LightSource', attribute 'name': '' is not a valid value of the atomic type 'NonEmptyStringNoWhitespacesAtBeginningAndEnd'.

Hängt das generell mit der Validator Implementierung in .net zusammen? Die Exception für solche Fälle gibt leider nicht mehr her.
Life is a short
private Nachricht | Beiträge des Benutzers