Thema: Delphi XMl Mit UTF-8 Kodierung

Einzelnen Beitrag anzeigen

franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

XMl Mit UTF-8 Kodierung

  Alt 10. Aug 2007, 13:58
Also ich muss Daten von einem Server holen und vorher eine XML schicken das klappt aber nicht
weis einer was das sein könnte.

Hier die Doku.

HTTP-Methode
Die HTTP-Methode (GET/POST) gibt dem empfangenden Server (hier: EBC) vor, wie er den
eingehenden Request verarbeiten soll. Für die Übermittlung der Daten wie auch aller übrigen
eingehenden Nachrichten am EBC der Synaxon AG ist ausschließlich die HTTP POST
Methode zu verwenden, nicht die HTTP GET Methode.
MIME-Header
Für die korrekte Übermittlung der Nachricht wird eingehend eine der folgenden Content-
Type und MIME Header Deklarationen erwartet. Nähere Informationen hierzu finden Sie
unter: http://www.faqs.org/rfcs/rfc2376.html
Content-Type: text/xml; charset=“utf-8“
Dies ist der empfohlene charset-Wert für die Verwendung mit text/xml. Alternativ kann
innerhalb des MIME Headers der charset auch weggelassen werden:
Content-Type: text/xml

Hier die xsd Datei

XML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="PriceAndAvailabilityQuery">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="TransactionHeader"/>
        <xs:element ref="PriceAndAvailability"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="TransactionHeader">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VersionId"/>
        <xs:element ref="GenerationDateTime"/>
        <xs:element ref="ERP"/>
        <xs:element ref="Login"/>
        <xs:element ref="Password"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="VersionId" type="xs:decimal"/>
  <xs:element name="GenerationDateTime" type="xs:dateTime"/>
  <xs:element name="ERP" type="xs:string"/>
  <xs:element name="Login">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:minLength value="1"/>
        <xs:maxLength value="15"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="Password">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:minLength value="1"/>
        <xs:maxLength value="40"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="PriceAndAvailability">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Query"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Query">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ProductReference"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ProductReference">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="ProprietaryProductIdentifier"/>
        <xs:element ref="GlobalProductIdentifier"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="ProprietaryProductIdentifier">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ProprietaryProductNumber" maxOccurs="10" minOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ProprietaryProductNumber" type="xs:string"/>
  <xs:element name="GlobalProductIdentifier">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="GlobalProductNumber" maxOccurs="10" minOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="GlobalProductNumber" type="xs:string"/>
</xs:schema>
Hier meine XML Datei die DEMo XML sieht genau so aus.

XML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<PriceAndAvailabilityQuery>
<TransactionHeader>
  <VersionId>1.00</VersionId>
  <GenerationDateTime>2007-08-10T14:42:29</GenerationDateTime>
  <ERP>W2</ERP>
  <Login>USER</Login>
  <Password>PW</Password>
</TransactionHeader>
  <PriceAndAvailability>
    <Query>
      <ProductReference>
        <ProprietaryProductIdentifier>
          <ProprietaryProductNumber>PCS340206</ProprietaryProductNumber>
        </ProprietaryProductIdentifier>
      </ProductReference>
    </Query>
  </PriceAndAvailability>
</PriceAndAvailabilityQuery>
Und hier mein Code
Delphi-Quellcode:
FIdHTTP:=TidHTTP.Create(Nil);
   FIdHTTP.AllowCookies:=True;
   FIdHTTP.ReadTimeout:=0;
   FIdHTTP.Request.CustomHeaders.Clear;
   FIdHTTP.Request.BasicAuthentication:=False;
   FIdHTTP.Request.ContentEncoding:='UTF-8';
   FIdHTTP.Request.ContentType:='text/xml';
   FIdHTTP.Request.Accept:='text/html, */*';

Stream:=TMemoryStream.Create;
   try
      FQuery.SaveToStream(Stream);
      Buffer:=FURL+'/'+FKomponente+'/'+FFunktion+'?format=xml';
      Stream.Position:=0;
      FResponse.Text:=FIdHTTP.Post(Buffer,Stream);
   finally
      Stream.Free;
   End;
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat