Autor Beitrag
Iceman8080
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 08.08.18 13:23 
Hallo zusammen,

ich möchte eine XML Datei gegen eine XSD Datei prüfen. Das funktioniert soweit auch ganz gut mit XMLDocument.Validate.

Jetzt werden allerdinge Errors ausgegeben, sobald in dem XML File ein neues Attribute hinzukommt, was im XSD File nicht aufgeführt ist. Da ich aber nicht bei jedem neuen Attribut im XML, was ich für meine Auswertung eh nicht benutze, ein Fehler geworfen wird, würde ich gerne dem Validate oder im XSD sagen: "Prüfe alles was in der XSD steht und wenn im XML was ist, was nicht definiert ist, ignoriere es".

Geht sowas? bzw. versteht Ihr was ich meine? ;-)

Vielen Dank bereit für Euere Hilfe.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 08.08.18 18:57 
Hallo und :welcome:

kannst du denn nicht im ValidationEventHandler auf spezielle Fehler prüfen, wie z.B. in einer der Antworten in How to ignore the validation of Unknown tags?
Iceman8080 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 09.08.18 07:36 
Coole Idee. Allerdings Ändert sich der Error-Text je nach dem was für eine Sprache man eingestellt hat. Somit ist das nicht gerade universell einsetzbar. Ich habe mich nun damit beholfen den ErrorCode abzufragen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 
        /// <summary>
        /// XML vs. XSD Validation Eventhandler
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        static void ValidationEventHandler(object sender, ValidationEventArgs e)
        {
            switch (e.Severity)
            {
                case XmlSeverityType.Error:
                    // Ignore Attributes which are not in XSD defined... We don't need them
                    if (((uint)e.Exception.HResult) != 0x80131941)
                    {
                        Log.Message("XML Error: " + e.Message.ToString(), Log.EventType.ERROR);
                        m_xml_errors++;
                    }
                    break;
                case XmlSeverityType.Warning:
                    Log.Message("XML Warning: " + e.Message.ToString(), Log.EventType.WARNING);
                    break;
            }
        }


Danke für Euere Hilfe.

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt