Einzelnen Beitrag anzeigen

creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#1

Validieren einer XML die 99.te

  Alt 2. Nov 2018, 11:01
Moin Moin.

Zum Thema 'Validieren' habe ich in den Posts hier und in der Google Welt allerlei gefunden, aber nichts hilft mit weiter.

Die XML : (Aressenliste.xml)
Code:
<?xml version="1.0"?>
<Adressen xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" xsi:schemaLocation="Adressenliste.xsd">
   <Adresse>
      <Index>Käsekuchen</Index>
      <Anrede>Frau</Anrede>
      <Titel>Dr.</Titel>
      <Vorname>Anneliese</Vorname>
      <Nachname>Rampelburger-Meschbach</Nachname>
      <Strasse>Knödelweg</Strasse>
      <Hausnummer>38</Hausnummer>
      <Postleitzahl>47120</Postleitzahl>
      <Ort>Kassebur-Segersheim</Ort>
      <Telefon>04985/83984938</Telefon>
      <Mobil>0175/3986582364</Mobil>
      <EMail>Anneliese@t-online.jo</EMail>
      <Geburtsdatum>12-12-12</Geburtsdatum>
      <Kommentar></Kommentar>
   </Adresse>
</Adressen>
Die XSD: (Adressenliste.xsd)
Code:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Adressen">
   <xs:complexType>
      <xs:sequence>
         <xs:element name="Adresse" maxOccurs="unbounded" minOccurs="0">
            <xs:complexType>
               <xs:sequence>
                  <xs:element type="xs:int" name="Index"/>
                  <xs:element type="xs:string" name="Anrede"/>
                  <xs:element type="xs:string" name="Titel"/>
                  <xs:element type="xs:string" name="Vorname"/>
                  <xs:element type="xs:string" name="Nachname"/>
                  <xs:element type="xs:string" name="Strasse"/>
                  <xs:element type="xs:integer" name="Hausnummer"/>
                  <xs:element type="xs:int" name="Postleitzahl"/>
                  <xs:element type="xs:string" name="Ort"/>
                  <xs:element type="xs:string" name="Telefon"/>
                  <xs:element type="xs:string" name="Mobil"/>
                  <xs:element type="xs:string" name="EMail"/>
                  <xs:element type="xs:date" name="Geburtsdatum"/>
                  <xs:element type="xs:string" name="Kommentar"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
   </xs:complexType>
</xs:element>
</xs:schema>
Der Code zum validieren:
Code:
uses MSXML, Xml.XMLIntf, XML.XMLDoc, XML.XMLDOM;

function Validate_XML(xmlFile:String): Boolean;
var
  XMLDoc: IXMLDocument;
  T0,T1,T2,T3,T4:String;
begin
  XMLDoc := NewXMLDocument;
  XMLDoc.ParseOptions := [poResolveExternals, poValidateOnParse];
  Result := True;
    try
      XMLDoc.LoadFromFile(xmlFile) ;
      XMLDoc.Active := true;
    except
      on E: EDomParseError do
        begin
          If LastDelimiter('\',E.URL) = 0 then T0:= Copy(E.URL,LastDelimiter('/',E.URL)+1,50);
          If LastDelimiter('/',E.URL) = 0 then T0:= Copy(E.URL,LastDelimiter('\',E.URL)+1,50);
          T1:= 'Bei der Validierung der ' + T0 + ' wurde folgender Fehler festgestellt:' + #13 +#13;
          T2:= E.Reason + #13;                                               // Grund
          T3:= 'Fehler in Zeile : ' + IntToStr(E.Line) + #13;                // Zeile
          T4:= 'Text der Zeile : ' + Trim(E.SrcText) + #13 + #13;           // Zeilentext
          If E.ErrorCode <> -2146697210 then
          begin
          Application.MessageBox(Pchar(T1+T2+T3+T4),Pchar('Validierungsfehler'),16);
          end;
          Result:=False;
        end;
    end;
end;
Trotz des offensichtlichen Fehlers im Feld <Index> (Käsekuchen ist ja wohl kein 32er Integer) läuft die Validierung anstandslos durch.

Was ist da verkehrt? Gibts noch andere Möglichkeiten in Delphi?


creehawk

Delphi 10.2. Tokyo
Windows 10
  Mit Zitat antworten Zitat