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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 143914
Url: https://administrator.de/contentid/143914
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
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...
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...
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:
-oder, wenn du es gar nicht erst als "element" definierst-
... 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]
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>
Grüße
Biber
[Edit] im zweiten Beispiel das erste von zwei "xs:maxInclusive"s berichtigt in "xs:MinInclusive". [/Edit]
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:
... 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.
--> 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
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
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
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
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:
Die 123 sind ein String. Er besteht aus den 3 Buchstaben 1, 2 und 3.
Hier sind die 123 ein Integer. Das hat den lustigen Nebeneffekt, dass es in XML aussieht wie {...
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 {...