![]() |
Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert
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:
das xsd Schema:<?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>
Code:
Und hier der Delphi-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>
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; |
AW: Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert
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? |
AW: Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert
Bin der Lösung nicht wesentlich näher, aber ich bleibe hartnäckig :wink:
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? |
AW: Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert
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:
Eventuell kann nur die XSD nicht abgerufen werden wodurch der Fehler zustande kommt.
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" 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:
Eventuell kannst du damit was anfangen.
<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> 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. :| |
AW: Fehler beim Validieren: Element wird verwendet, ist aber nicht deklariert
Erstmal vielen Dank für deine Mühe!!!
Zitat:
![]() Zitat:
Code:
Das teste ich gleich mal...
Erst xmlns:xsi dann xsi:schemaLocation
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz