AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert

Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert

Ein Thema von dpg123 · begonnen am 30. Nov 2017 · letzter Beitrag vom 5. Dez 2017
Antwort Antwort
dpg123

Registriert seit: 13. Apr 2015
22 Beiträge
 
Turbo Delphi für Win32
 
#1

Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert

  Alt 30. Nov 2017, 15:37
Hallo liebes Forum,

beim Validieren einer xml Datei gegen ein xsd Schema tritt folgende Exception auf:

"Das Element 'Meldung01' wird verwendet, aber es ist im DTD/Schema nicht deklariert."

Das xsd Schema ist aus mehreren anderen zusammengesetz, was das ganze leider etwas unübersichtlich macht, aber evt. liegt es auch gar nicht an der Verschaltelung...

Ich hoffe, ich habe unten das nötige Minimalbsp. zusammengestellt, um den Fehler nachzuvollziehen...

Hab leider keine Idee, wo ich ansetzen muss...

Hier die xml Datei:
Code:

<?xml version="1.0" encoding="ISO-8859-15"?>

<Meldung01 xsi:schemaLocation="http://www.someserver.de Meldung01Paket.xsd"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.someserver.de"
       xmlns:mel01V02="http://www.someserver.de/mel01v02"
       xmlns:stV02="http://www.someserver.de/standardtypen/v02">
       
   <mel01V02:Daten>
       ...
   </mel01V02:Daten>
   
</Meldung01>
das xsd Schema:
Code:
<?xml version="1.0" encoding="ISO-8859-15"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
      targetNamespace="http://www.someserver.de"
      xmlns:mel01V01="http://www.someserver.de/mel01v01"
      xmlns:mel01V02="http://www.someserver.de/mel01v02"
      xmlns:mel01V03="http://www.someserver.de/mel01v03"
      xmlns="http://www.someserver.de"
      elementFormDefault="qualified"
      version="1.0.0">
      
   <xs:import namespace="http://www.someserver.de/mel01v01" schemaLocation="./mel01V01.xsd"/>
   <xs:import namespace="http://www.someserver.de/mel01v02" schemaLocation="./mel01V02.xsd"/>
   <xs:import namespace="http://www.someserver.de/mel01v03" schemaLocation="./mel01V03.xsd"/>
   
   <xs:element name="Meldung01">
      <xs:complexType>
         <xs:sequence maxOccurs="100">
            <xs:choice>
                <xs:element ref="mel01V01:Daten"/>
                <xs:element ref="mel01V02:Daten"/>
                <xs:element ref="mel01V03:Daten"/>
            </xs:choice>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   
</xs:schema>
Und hier der Delphi-Code:
Delphi-Quellcode:
  xmlDoc := TXMLDocument.Create(nil) ;

  try

    xmlDoc.ParseOptions := xmlDoc.ParseOptions + [poResolveExternals,poValidateOnParse];

    try

      xmlDoc.LoadFromFile(xmlFileName) ; // <- obige Exception fliegt schon hier!

      xmlDoc.Active := true; // this will validate

      result := true;

    except

      on E: EDOMParseError do
        ShowMessage( e.Message );

    end;

  finally

    xmlDoc := nil;

  end;
  Mit Zitat antworten Zitat
dpg123

Registriert seit: 13. Apr 2015
22 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert

  Alt 1. Dez 2017, 16:03
Bin leider immer noch nicht weiter...

Hat jemand evt einen Hinweis, in welche Richtung ich denken muss, was ich mir genauer anschauen sollte?

Liegt es an der xsd/xml Datei, am xml-Vendor oder am Delphi Code?
  Mit Zitat antworten Zitat
dpg123

Registriert seit: 13. Apr 2015
22 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert

  Alt 5. Dez 2017, 10:16
Bin der Lösung nicht wesentlich näher, aber ich bleibe hartnäckig

Ein Fehler in der xsd/xml Datei sollte es eigentlich nicht sein, da mein Ziel-Server die xml-Datei erfolgreich validiert und ich einfach mal davon ausgehe, dass das gleiche xsd-Schema verwendet wird.

Merkwürdig finde ich, dass die Exception schon in der xmlDoc.LoadFromFile(xmlFileName) Zeile passiert und gar nicht beim xmlDoc.Active := true setzen, wo nach meinem Verständis das Validieren passieren sollte. Was will mir das sagen?
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert

  Alt 5. Dez 2017, 14:10
Ich habe bisher relativ wenig mit XSD Dateien gemacht. Was mit aber auffällt ist, dass in deiner XML Datei das zugehörige XSD Schema angegeben wird und in dem Link vmtl. ein "/" fehlt.

Also in etwa so:

Code:
Alt: <Meldung01 xsi:schemaLocation="http://www.someserver.de Meldung01Paket.xsd" <--- Hier fehlt ein "/" zwischen ".de" und "Meldung01Paket.xsd"
Neu: <Meldung01 xsi:schemaLocation="http://www.someserver.de/Meldung01Paket.xsd"
Eventuell kann nur die XSD nicht abgerufen werden wodurch der Fehler zustande kommt.

Wenn ich die XSD Quelle bei mit entferne erhalte ich von Notepad++ die Meldung, dass das Schema in Zeile 21 nicht verarbeitet werden kann. Das entspricht bei mir der markierten Zeile in folgendem Ausschnitt:

XML-Code:
<xs:choice>
  <xs:element ref="mel01V01:Daten"/>
  <xs:element ref="mel01V02:Daten"/>
  <xs:element ref="mel01V03:Daten"/> <--- Das hier funktioniert wohl irgendwie nicht lt. Notepad++
</xs:choice>
Eventuell kannst du damit was anfangen.

Tipp: Installier dir Notepad++ und das XML-Tools Addon. Dann kannst du das ganz schnell damit prüfen. Eventuell sind die Meldungen auch etwas aussagekräftiger.

Ich hoffe ich konnte dir damit wenigstens ein bisschen weiterhelfen.
  Mit Zitat antworten Zitat
dpg123

Registriert seit: 13. Apr 2015
22 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert

  Alt 5. Dez 2017, 16:52
Erstmal vielen Dank für deine Mühe!!!

Ich habe bisher relativ wenig mit XSD Dateien gemacht. Was mit aber auffällt ist, dass in deiner XML Datei das zugehörige XSD Schema angegeben wird und in dem Link vmtl. ein "/" fehlt.

Also in etwa so:

Code:
Alt: <Meldung01 xsi:schemaLocation="http://www.someserver.de Meldung01Paket.xsd" <--- Hier fehlt ein "/" zwischen ".de" und "Meldung01Paket.xsd"
Neu: <Meldung01 xsi:schemaLocation="http://www.someserver.de/Meldung01Paket.xsd"
Das Leerzeichen hatte mich auch erst gewundert, scheint aber richtig zu sein. Siehe zB hier
https://www.w3schools.com/xml/schema_schema.asp

Zitat von www.w3schools.com:
Once you have the XML Schema Instance namespace available:
Code:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
you can use the schemaLocation attribute. This attribute has two values, separated by a space. The first value is the namespace to use. The second value is the location of the XML schema to use for that namespace:
Code:
xsi:schemaLocation="https://www.w3schools.com note.xsd"
Aber was mit gerade auffällt: die Reihefolge der Deklaration ist anders.
Code:
Erst xmlns:xsi dann xsi:schemaLocation
Das teste ich gleich mal...

Wenn ich die XSD Quelle bei mit entferne erhalte ich von Notepad++ die Meldung, dass das Schema in Zeile 21 nicht verarbeitet werden kann.
Ok, die Stelle werde ich mir noch mal gesondert anschauen...

Tipp: Installier dir Notepad++ und das XML-Tools Addon. Dann kannst du das ganz schnell damit prüfen. Eventuell sind die Meldungen auch etwas aussagekräftiger.
Guter Hinweis, kann ich aber erst morgen machen, da mein Admin mir das heute nicht mehr installieren kann.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz