AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML Datei einlesen mit xsd einträgen?
Thema durchsuchen
Ansicht
Themen-Optionen

XML Datei einlesen mit xsd einträgen?

Ein Thema von mika · begonnen am 7. Jun 2006 · letzter Beitrag vom 7. Jun 2006
Antwort Antwort
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#1

XML Datei einlesen mit xsd einträgen?

  Alt 7. Jun 2006, 13:58
hallo erstmal,

ich muss eine XML Datei einlesen in der viele XSD Tags stehen, ich weiss jetzt nicht ganz genau was das ist, ein Kollege meinte das sind Stylesheet Verknüpfungen...

Hier mal die XML Datei

XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">
 <xsd:element name="ZMA01">
  <xsd:annotation>
   <xsd:documentation>Materialstamm - DFÜ Lieferant</xsd:documentation>
  </xsd:annotation>
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="IDOC">
     <xsd:complexType>
      <xsd:sequence>
       <xsd:element name="EDI_DC40">
        <xsd:annotation>
         <xsd:documentation>IDoc-Kontrollsatz für Schnittstelle zu einem externen System</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
         <xsd:sequence>
          <xsd:element name="TABNAM" type="xsd:string" fixed="EDI_DC40">
           <xsd:annotation>
            <xsd:documentation>Name der Tabellenstruktur</xsd:documentation>
           </xsd:annotation>
          </xsd:element>
          <xsd:element name="MANDT" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Mandant</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="3"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="DOCNUM" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Nummer des IDocs</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="16"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="DOCREL" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>SAP-Release des IDocs</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="4"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="STATUS" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Status des IDocs</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="2"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="DIRECT">
           <xsd:annotation>
            <xsd:documentation>Richtung</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:enumeration value="1">
              <xsd:annotation>
               <xsd:documentation>Ausgang</xsd:documentation>
              </xsd:annotation>
             </xsd:enumeration>
             <xsd:enumeration value="2">
              <xsd:annotation>
               <xsd:documentation>Eingang</xsd:documentation>
              </xsd:annotation>
             </xsd:enumeration>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="OUTMOD" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Ausgabemodus</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="1"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="EXPRSS" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Übersteuerung im Eingang</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="1"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="TEST" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Testkennzeichen</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="1"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="IDOCTYP" type="xsd:string" fixed="ZMA01">
           <xsd:annotation>
            <xsd:documentation>Name des Basistyps</xsd:documentation>
           </xsd:annotation>
          </xsd:element>
          <xsd:element name="CIMTYP" minOccurs="0" type="xsd:string" fixed="">
           <xsd:annotation>
            <xsd:documentation>Erweiterung (vom Kunden definiert)</xsd:documentation>
           </xsd:annotation>
          </xsd:element>
          <xsd:element name="MESTYP" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Nachrichtentyp</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="30"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="MESCOD" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Nachrichtenvariante</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="3"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="MESFCT" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Nachrichtenfunktion</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="3"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="STD" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>EDI-Standard, Kennzeichen</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="1"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="STDVRS" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>EDI-Standard, Version und Release</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="6"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="STDMES" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>EDI-Nachrichtentyp</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="6"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="SNDPOR">
           <xsd:annotation>
            <xsd:documentation>Absenderport (SAP-System, externes Subsystem)</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="10"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="SNDPRT">
           <xsd:annotation>
            <xsd:documentation>Partnerart des Absenders</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="2"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="SNDPFC" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Partnerrolle des Absenders</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="2"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="SNDPRN">
           <xsd:annotation>
            <xsd:documentation>Partnernummer des Absenders</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="10"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="SNDSAD" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Absenderadresse (SADR)</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="21"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="SNDLAD" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Logische Adresse des Absenders</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="70"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="RCVPOR">
           <xsd:annotation>
            <xsd:documentation>Empfängerport</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="10"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="RCVPRT" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Partnerart des Empfängers</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="2"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="RCVPFC" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Partnerrolle des Empfängers</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="2"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="RCVPRN">
           <xsd:annotation>
            <xsd:documentation>Partnernummer des Empfängers</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="10"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="RCVSAD" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Empfängeradresse (SADR)</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="21"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="RCVLAD" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Logische Adresse des Empfängers</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="70"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="CREDAT" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Erstellungsdatum</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="8"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="CRETIM" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Erstellungsuhrzeit</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="6"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="REFINT" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Übertragungsdatei (EDI Interchange)</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="14"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="REFGRP" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Nachrichtengruppe (EDI Message Group)</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="14"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="REFMES" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Nachricht (EDI Message)</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="14"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="ARCKEY" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Schlüssel des externen Nachrichtenarchivs</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="70"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="SERIAL" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Serialisierung</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="20"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
         </xsd:sequence>
         <xsd:attribute name="SEGMENT" use="required">
          <xsd:simpleType>
           <xsd:restriction base="xsd:string">
            <xsd:enumeration value="1"/>
           </xsd:restriction>
          </xsd:simpleType>
         </xsd:attribute>
        </xsd:complexType>
       </xsd:element>
       <xsd:element name="ZMA01K" minOccurs="0">
        <xsd:annotation>
         <xsd:documentation>Materialstamm - DFÜ Lieferant (Kopf)</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
         <xsd:sequence>
          <xsd:element name="LIFNR" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Kontonummer des Lieferanten</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="10"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="MATNR" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Materialnummer</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="18"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="REVLV" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Revisionsstand</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="2"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="MAKT1" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Materialkurztext</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="40"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="MAKT2" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Materialkurztext</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="40"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="MEINS" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Basismengeneinheit</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="3"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="WRKST" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Werkstoff</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="48"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="MTART" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Materialart</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="4"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="LAEDA" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Datum der letzten Änderung</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="8"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="ZEINR" minOccurs="0">
           <xsd:annotation>
            <xsd:documentation>Dokumentnummer (ohne Dokumentenverwaltungssystem)</xsd:documentation>
           </xsd:annotation>
           <xsd:simpleType>
            <xsd:restriction base="xsd:string">
             <xsd:maxLength value="22"/>
            </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
         </xsd:sequence>
         <xsd:attribute name="SEGMENT" use="required">
          <xsd:simpleType>
           <xsd:restriction base="xsd:string">
            <xsd:enumeration value="1"/>
           </xsd:restriction>
          </xsd:simpleType>
         </xsd:attribute>
        </xsd:complexType>
       </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="BEGIN" use="required">
       <xsd:simpleType>
        <xsd:restriction base="xsd:string">
         <xsd:enumeration value="1"/>
        </xsd:restriction>
       </xsd:simpleType>
      </xsd:attribute>
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
</xsd:schema>
Ich wollte jetzt nur mal an die Struuktur der Daten kommen die unter dem Knoten ZMA01K steht. Das ganze habe ich so gemacht:

Delphi-Quellcode:
...
Var
  Materialdatei: IXMLDocument;
  RootNode, DatenNode: IXMLNode;

begin
...
    Materialdatei := TXMLDocument.Create(ausDatei);
    Materialdatei.Options := [doNodeAutoIndent];
    Materialdatei.Active := True;
    RootNode := Materialdatei.ChildNodes.Nodes['ZMA01K'];
    IF RootNode.HasChildNodes then
    begin
      // Den Text "Materialstamm - DFÜ Lieferant (Kopf)" ausgeben laut Dokument
      Memo1.Lines.Add(RootNode.NodeValue);
      for ndxEintrag := 0 to RootNode.ChildNodes.Count - 1 do
      begin
        // Die einzelnen Daten ausgeben (hab ich noch nciht)
      end;
    end;
...
Aber delphi gibt mir die Fehlermeldung das der Knoten ZMA01K nicht gefunden wurde.
Wie mach ich es denn am besten das ich erst die Struktur auslese und dann die
Daten anhand der Struktur (am liebsten mit Delphi Boardmitteln)

//edit
So wies aussieht ist das ganze xsd gewurschtel nur die definition der späteren xml datei die ich
gegen dieses schema gegenzeichnen kann zur validierung. also müsste ich das ganze gar nicht importieren, aber es ist mir irgendwie von nutzen weil ihc hier in der DP gelesen habe das man
diese Datei einlesen kann und dann hat man eine neue klasse die der xml datei entspricht oder so.
:: don't Panic ::
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#2

Re: XML Datei einlesen mit xsd einträgen?

  Alt 7. Jun 2006, 15:04
Hallo!

Zuerst einmal eine Bitte: Könntest Du die Datei aus Deinem Post entfernen und anhängen? Ist ein bischen übersichtlicher.

Das was Du da gepostest hast ist eine Schema-Definition auch als XSD-Datei bekannt.

Aus dieser Datei kannst Du die von Delphi automatisch eine Unit zur Behandlung erstellen lassen.

D.h. Du könntest.... wäre diese Datei nicht fehlerhaft ....

Im Kopf der Datei ist eine UTF-8-Codierung angegeben. Das ist auch gut so. Aber leider ist diese UTF-8 Codierung dann nicht verwendet worden.
In den documentation-Tags finden sich unter anderem Umlaute.
Dies ist der ImportExperte von Delphi nicht gewillt anzunehmen.
Wenn ich das richtig sehe, dann sind Umlaute nur in Documentation-Tags verwendet worden.
Dort könntest Du sie von Hand in ae ue usw ändern, ohne dass Du das Schema verändern würdest.
Dannach müßtest Du unter
Datei
Neu
weitere
XML-Datenbindung

eine entsprechende Datenbindung anlegen können.

Bei weiteren Fragen, einfach melden.

Hope it helps (a little bit)

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:50 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