tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1677
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Tikonteroga Tikonteroga ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    153
    Hallo,

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

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     
    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 ?
     

  2. #2
    Tikonteroga Tikonteroga ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    153
    Hallo,

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

    Hierfür verwende ich folgenden Code.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    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.
     

  3. #3
    Tikonteroga Tikonteroga ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    153
    Wenn ich folgenden Code ergänze ...

    Code :
    1
    
    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.
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.
    Zitat Zitat von Tikonteroga Beitrag anzeigen
    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).
    Zitat Zitat von Tikonteroga Beitrag anzeigen
    Wenn ich folgenden Code ergänze ...

    Code :
    1
    
    xmlReaderSettings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;

    ... erhalte ich folgende Warnung(en).
    Code :
    1
    
    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.
    Zitat Zitat von Tikonteroga Beitrag anzeigen
    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?
    Zitat Zitat von Tikonteroga Beitrag anzeigen
    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...
    Zitat Zitat von Tikonteroga Beitrag anzeigen
    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.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Tikonteroga Tikonteroga ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    153
    Hallo,

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

    XML Schema

    Code :
    1
    
    <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 :
    1
    
    <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 ******
     

  6. #6
    Martin Honnen Martin Honnen ist offline Mitglied Bronze
    Registriert seit
    Dec 2011
    Beiträge
    30
    Das Schema definiert Elemente in seinem targetNamespace http://autosar.org/3.1.5, das XML-Dokument hingegen hat Elemente im Namensraum http://autosar.org/3.1.4.XXX.2.
     

Ähnliche Themen

  1. JAVA XML parsen und DOM mit Schema validieren
    Von biturbogolf im Forum Java
    Antworten: 2
    Letzter Beitrag: 14.03.12, 01:03
  2. Antworten: 2
    Letzter Beitrag: 27.07.10, 19:28
  3. Antworten: 13
    Letzter Beitrag: 18.01.08, 22:18
  4. Mit JDOM XML-Datei gegen XML-Schema validieren
    Von mmueller78 im Forum Java
    Antworten: 1
    Letzter Beitrag: 17.08.07, 14:15
  5. XML gegen Schema validieren
    Von mtk-flo im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 27.06.07, 16:02