Einzelnen Beitrag anzeigen

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, 14: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