XML-Datei nach XML-Schema validieren

Tikonteroga

Erfahrenes Mitglied
Hallo,

ich muss XML-Dateien eines bestimmten Dialekts (ARXML) mit .NET verarbeiten.

Code:
arxmlDocument.XmlResolver = new XmlUrlResolver();
                    
arxmlDocument.Load(fileName);
                    
ValidationHandler handler = new ValidationHandler();
                    
ValidationEventHandler eventHandler = new ValidationEventHandler(handler.ValidationEventHandler);
                    
arxmlDocument.Validate(eventHandler);

In den XML-Dateien ist auch stets ein XML-Schema angegeben. Wenn ich jedoch die Validate Methdoe ausführe wird eine Exception mit folgender Message geworfen.

Das XmlSchemaSet für das Dokument ist entweder Null oder enthält keine Schemas. Stellen Sie vor dem Aufruf von 'Validate' Schemainformationen bereit.

Ich hatte angenommen, dass das XML-Schema von der in der XML-Datei angegebenen Url verwendet wird und habe deswegen den XmlUrlResolver verwendet. Ist das so überhaupt möglich, oder muss ich das XML-Schema lokal einlesen ?
 
Hallo,

ich versuche zurzeit eine XML-Datei nach einem Schema zu validieren.

Hierfür verwende ich folgenden Code.

Code:
namespace ArxmlCheck
{
    class Program
    {
        static void ValidationEventHandler(object sender, ValidationEventArgs e)
        {
            System.Console.Error.WriteLine("[{0}/{1}] {2}", 
                e.Exception.LineNumber,                                         //Zeile 
                e.Exception.LinePosition,                                       //Spalte
                e.Exception.Message);                                           //Beschreibung
        }
        
        static void Main(string[] args)
        {
            XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();

            xmlReaderSettings.ValidationType = ValidationType.Schema;
            xmlReaderSettings.Schemas.Add("http://autosar.org/3.1.5", args[1]);
            xmlReaderSettings.ValidationEventHandler += ValidationEventHandler;

            XmlReader xmlReader = XmlReader.Create(args[0], xmlReaderSettings);

            while (xmlReader.Read()) ;

            System.Console.WriteLine("Finished");
        }
    }
}

Jetzt habe ich das Problem, dass der Wert von xmlns im XML Schema und in der XML-Datei unterschiedlich sind. Bedeutet dies, dass das von mir verwendete Schema nicht das Schema für die von mir zu validierende Datei ist ?

Gibt es auch eine Möglichkeit, wie ich überprüfen kann, dass die Validierung erfolgreich durchgeführt wurde ? Denn mein ValidationEventHandler wird nicht ein Mal aufgerufen.
 
Wenn ich folgenden Code ergänze ...

Code:
xmlReaderSettings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;

... erhalte ich folgende Warnung(en).

Die Schemainformation für das Element 'http://autosar.org/3.1.4.XXX.2:L-2' konnten nicht gefunden werden.
 
Hi.
Ich hatte angenommen, dass das XML-Schema von der in der XML-Datei angegebenen Url verwendet wird und habe deswegen den XmlUrlResolver verwendet. Ist das so überhaupt möglich, oder muss ich das XML-Schema lokal einlesen ?
Ja, das ist möglich. Dazu muß im Dokument allerdings auch wirklich vereinbart sein, wo das Schema heruntergeladen werden kann. (XMLSchema-instance -> schemaLocation).
Wenn ich folgenden Code ergänze ...

Code:
xmlReaderSettings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;

... erhalte ich folgende Warnung(en).
Code:
Die Schemainformation für das Element 'http://autosar.org/3.1.4.XXX.2:L-2' konnten nicht gefunden werden.
Du hast eine andere Version des Schemas verwendet. Die Schemata passen nicht zusammen.
Jetzt habe ich das Problem, dass der Wert von xmlns im XML Schema und in der XML-Datei unterschiedlich sind.
Was meinst du mit "Wert" von xmlns? Meinst du den Namensraum-Präfix oder wirklich den Wert des Attributes?
Bedeutet dies, dass das von mir verwendete Schema nicht das Schema für die von mir zu validierende Datei ist ?
Kommt drauf an was du meinst...
Gibt es auch eine Möglichkeit, wie ich überprüfen kann, dass die Validierung erfolgreich durchgeführt wurde ? Denn mein ValidationEventHandler wird nicht ein Mal aufgerufen.
Dann gab es auch keine Probleme.

Gruß

PS: Bitte füge die Ausgaben nicht als Zitate ein, sondern als Code. Das match sich mit dem zitieren besser.
 
Hallo,

ich habe mal jeweils die Root-Elemente des XML Schema und der XML Instanz angehängt.

XML Schema

Code:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:AR="http://autosar.org/3.1.5" targetNamespace="http://autosar.org/3.1.5" elementFormDefault="qualified" attributeFormDefault="unqualified">

XML Instanz

Code:
<AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://autosar.org/3.1.4.XXX.2" xsi:schemaLocation="http://autosar.org/3.1.4.XXX.2 autosar.xsd" T="2010-10-15T13:41:41">

Bei dem XML Schema handelt es sich um eine Vorgabe bzw. einen Standard. Dieser scheint aber herstellerspezifisch erweitert bzw. eingeschränkt worden sein ...

Ich muss mir jetzt wohl ein Herstellerspezifisches XML Schema besorgen ******
 
Zurück