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;