pcfjkg
Goto Top

Im XML-Dokument Daten vom Typ integer an einen SERVER senden

Mit POST soll an ein SERVER im Internet eine XML-Datei gesendet werden. Diese wird mit dem Kommando print aus ms-access erstellt. und soll im XML-Dokument als Datentyp integer,32 bit gesendet werden.

Eine URL --->https://www.xxx.php erwartet eine POST-Request Anfrage mit einer definierten XML Struktur.
Beginnend mit

<?xml version="1.0" encoding="utf-8"?>
...
...
soll die Auszeichnung zwischen den Tags

<Beispieltag>123456789</Beispieltag>

als Datentyp integer gesendet werden. Die XML-Datei wird aus MS-Access mit Print #<FileNr> erstellt und damit nach meinem Verständnis in das File als char geschrieben.
Im Internet habe ich nur Beispiele gefunden wie:
...
<xs:element name="Beispieltag" type="xs:integer" />
<Beispieltag>123456789</Beispieltag>
was wohl falsch ist, denn bei der Anzeige der Datei im XML-Editor wird bereits die erste Zeile als Fehler markiert.
Kann denn hier mit eigenen Definitionen in einem Schema (wie als Methode im Internet gelegentlich gelesen) gearbeitet werden, die der SERVER ja nicht kennt und falls doch, wie könnte dies aussehen ?

Im Voraus bereits besten Dank für alle, die einem Frischling für diese sicher für Profis einfache Frage eine Tip geben.

PCFJKG

Content-ID: 143914

Url: https://administrator.de/contentid/143914

Ausgedruckt am: 24.11.2024 um 05:11 Uhr

maretz
maretz 01.06.2010 um 07:04:56 Uhr
Goto Top
Moin,

vorab - ich bin sicher kein XML-Spezialist. Aber XML wird doch normalerweise für den Datenaustausch verwendet - d.h. du hast eine Anwendung die das einliest und dann (in welcher Form auch immer) dem Benutzer zur Verfügung stellt (z.B. ein PHP-Script welches die Daten aus der XML-File liest und das dann als Webseite darstellt).

In dem Fall würde ich die Anwendung so bauen das die weiss das bei "BeispielTag" immer ein Integer ist... Dann noch ne kleine Fehlerbehandlung (falls da mal nen Buchstabe drin ist oder ne <> bei der Übermittlung auf Urlaub gegangen is... - und die Sache is erledigt...
PCFJKG
PCFJKG 01.06.2010 um 07:26:18 Uhr
Goto Top
Hallo Maretz Frühaufsteher,
erst enmal Dank für die schnelle Antwort. Die Anwendung wird leider nicht von mir bereitgestellt (ich kenne ausser der URL keine weiteren Details) . Sie schreibt mir aber genau den Aufbau der XML-Datei (und dabei eben auch den Datentyp integer im vorliegenden fall) vor.

Viele Grüße

PCFJKG
Biber
Biber 01.06.2010 um 09:44:22 Uhr
Goto Top
Moin PCFJKG,

du hast ja die Schema-Beschreibung für "Beispieltag" eröffnet mit "xs:element".
Demnach geht XML Schema und alle, die sich daran halten davon aus, dass "element Beispieltag" ein "komplexes Element" ist.
Da es aber nur ein "simple Type " ist, musst du ein explizites "xs:SimpleType" absetzen.

Also in etwa so:
<xs:element name="Beispieltag" >  
  < xs:simpleType>
    <base="xs:integer"/>  
</xs:simpleType>
</xs:element

-oder, wenn du es gar nicht erst als "element" definierst-
 <xs:simpleType name="Beispieltag" >  
    <xs:restriction base="xs:integer">  
       <xs:minInclusive value="10000"/>  
      <xs:maxInclusive value="42424242"/>  
    </xs:restriction>
  </xs:simpleType>
... wenn du noch irgendwelche Plausibilitäten einbauen willst

Grüße
Biber

[Edit] im zweiten Beispiel das erste von zwei "xs:maxInclusive"s berichtigt in "xs:MinInclusive". [/Edit]
PCFJKG
PCFJKG 01.06.2010 um 13:12:50 Uhr
Goto Top
Hallo Biber,

auch Dir vielen Dank für Deine rasche Reaktion. Vermutlich habe ich mich mit meiner Aussage, dass im File die Zeile <xs:element name="Beispieltag" type="xs:integer" /> vorkommt zu weit vorgewagt, denn diese ist einfach von einem Internetbeispiel abgeschrieben, ohne dass ich sie verstehe oder an anderer Stelle ein Schema etc. definiert habe (Du setzt damit wahrscheinlich zuviel Wissen bei mir voraus). Ich leite das daraus ab dass ich meinte, einfach Deinen Hinweis ohne weitere Arbeit in ein XML-File übernehmen zu können. Für Dich sicher nicht überraschend: weit gefehlt.

Wenn ich nun ein File habe z-B. test.XML

<?xml version='1.0' encoding='utf-8'?>
<xs:simpleType name="Beispieltag" >
<xs:restriction base="xs:integer">
<xs:maxInclusive value="10000"/>
<xs:maxInclusive value="42424242"/>
</xs:restriction>
</xs:simpleType>

sagt der Editor:


Der Vorgang wurde erfolgreich beendet. Fehler beim Bearbeiten der Ressource 'file:///N:/ElKv/Test2.xml'. Zeile 2, Position...

<xs:simpleType name="Beispieltag" >

Es fehlen sicher Verweise, Deklarationen, Includes o.ä. im File ..(?)

Wenn Du mir noch einmal helfen könntest, würde ich mich sehr freuen.

Viel Grüße


PCFJKG
Biber
Biber 01.06.2010 um 13:42:08 Uhr
Goto Top
Moin PCFJKG,

vergiss das zweite Beispiel wieder... da habe ich unnötiges Komplexität reingebracht und vor allen auch Tippfehler.
Einen habe ich eben gesehen und korrigiert... aber getestet ist ja alles nicht.

Was wesentlich war ist:
  • gib explizit mit an, dass es sich um einen "simpleType" und NICHT um einen "complexType" handelt.

 < xs:simpleType name="Beispieltag" type="xs:integer"/>  

... das sollte für ein Integer-"Feld" namens "BeispielTag" ausreichen

Punkt. Absatz.
Aber: Mehrere "Felder" eines "Datensatzes" kann du dann ja in einem ComplexType zusammenfassen.

<xs:element name="MeinDatenImport" type="MeinImportSatz"/>  


    <xs:complexType name="MeinImportSatz">  
       <xs:sequence>
         <xs:element name="MeinTagEins" type="xs:string"/>  
         <xs:element name="DasFeldZwo" type="xs:string"/>  
         <xs:element name="Beispieltag" type="xs:integer"/>  
         <xs:element name="WTF" type="xs:string"/>  
       </xs:sequence>
    </xs:complexType>

--> Hier kannst du in den inneren Tags auf die Ansage "simpleType" verzichten, da ein "complexType" die "äußere Klammer" um "einfacherere" Elemente bildet.

Grüße
Biber
PCFJKG
PCFJKG 01.06.2010 um 14:30:20 Uhr
Goto Top
Hallo Biber,

schön, wenn einem schnell geholfen wird. Ich habe vor Deiner Zeile im Beispiel

<xs:element name="MeinDatenImport" type="MeinImportSatz"/>

die Zeile eingefügt: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> und Dein Beispiel funktioniert (Licht am Ende des Tunnels, sehr schön)!
Da ich aber gerade eben mit XML beginne ist mir nicht klar, ob die Zeile <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> erforderlich war (und was sie macht), ist aber egal, ich kann jetzt weiter und mit learning by doing habe ich bisher so manche Hürde nehmen können.

Daher: Nochmals danke und schöne grüße


PCFJKG
Biber
Biber 01.06.2010 um 15:15:50 Uhr
Goto Top
Freut mich, PCFJKG,

Zu deiner Frage, was die "xmlns"-Zeile macht und ob sie gebraucht wird, kann ich aus dem Bauch heraus antworten.

"xmlns" steht naheliegenderweise für "XML-Namespace", wobei das wiederum der neudeutsche Slangausdruck für "Namensraum" ist.
Namensräume werden nach dem Schlüsselwort "xmlns": definiert.
Da kannst du natürlich auch angeben "XmlNS:xs="www.mir-doch-egal.de" ....aber die Orientierung an einer "echten" konvention wie die oben stehende ist natürlich erstrebenswerter..
Wenn du einen Namespace angibst, dann müssen die folgenden Anweisungen (Attribute, Elemente...) zwischen <xs:schema> und </xs:Schema>.
Der Namespace ist dann der Tag aller Tags, also Root/Wurzelknoten des .gesamten XML-Dokuments

Grüße
Biber
dog
dog 01.06.2010 um 23:48:04 Uhr
Goto Top
Irgendwie verstehe ich nicht worauf du hinaus willst.
Der API-Provider, dessen API du benutzen willst hat doch sicher ganz klare Angaben dazu gemacht wie eine XML-Datei strukturiert sein muss.
Und auch ganz genau danach werden die meisten Parser (bei PHP meistens SimpleXML) auch nur suchen.
Du kannst nicht einfach selbst irgendwelche Tags definieren...

Und zu Integer/Char:
Einen wirklichen Integer gibt es bei XML nicht, da es lediglich aus Buchstaben besteht (und zum Verständnis: "123" sind 3 Buchstaben und nicht eine Zahl, die wäre hier erst gar nicht sichtbar).
Würde man echte Zahlen einbauen wollen müsste man die erst durch base64 jagen.

Mal ein konkretes Beispiel:
<?xml version="1.0" encoding="UTF-8"?> 
<root>
	<item>123</item>
</root>

Die 123 sind ein String. Er besteht aus den 3 Buchstaben 1, 2 und 3.

<?xml version="1.0" encoding="UTF-8"?> 
<root>
	<item>{</item>
</root>

Hier sind die 123 ein Integer. Das hat den lustigen Nebeneffekt, dass es in XML aussieht wie {...
PCFJKG
PCFJKG 02.06.2010 um 04:53:32 Uhr
Goto Top
Hallo Dog,

auch Dir vielen Dank für Deine Antwort. Ich habe tatsächlich das Problem, dass mir der Unterscheid char / int in XML nicht klar ist. Wo ich "herkomme" (früher ein wenig C++ und seit einiger Zeit zunehmend mit MS-Access) sind Datentypen klar definiert, haben unterschiedlichen Speicherbedarf etc. In XML sieht tatsächlich alles aus wie ein String (bzw. mehrere).
Der Provider schreibt tatsäch klar die Struktur der Datei vor, will aber in einigen Tags die zu übertragenden Werte in char, int, auch float kommt vor etc. Und hier kommt mein Verständnisproblem:

Wenn alles alphanumerisch dargestellt wird (wie es ja im XML-Editor letztlích auch sichtbar ist), wozu wird dann ein Schema verwendet und:
wie soll der Provider z.B. die Zahl 123 als int, oder z.B. 5,896 als float erhalten ?

Grüße

PCFJKG