Zum Hauptinhalt springen

XmlSave

obj -> XmlSave(alpha1[, int2[, handle3[, int4[, int5]]]]) : int

Ausführbar von Clients mit grafischer Oberfläche Ausführbar vom Server Ausführbar von Clients mit Programmierschnittstelle Ausführbar von der Web-Schnittstelle Ausführbar vom Druckprozessor Ausführbar von der ODBC-Schnittstelle Ausführbar vom SOA-Service

XML-Daten schreiben

Details

  • obj: Deskriptor des zu schreibenden Objekts
  • alpha1: Pfad- und Dateiname
  • int2:
    • Optionen (optional):
    • _XmlSaveDefault
    • _XmlSavePure
  • handle3: Deskriptor eines Memory -Objekts (optional)
  • int4: Zielzeichensatz (optional)
  • int5: Quellzeichensatz (optional)
  • Resultat: int Fehlerwert
  • Siehe: Verwandte Befehle , XmlLoad () , Blog

Der Befehl erzeugt aus dem übergebenen Objekt (obj) eine XML-Datei (alpha1) oder schreibt XML in das in (handle3) angegebene Memory -Objekt. Das übergebene Objekt muss vom Typ _CteNode, ein Dialog, ein Menü oder ein Druck-Objekt sein. Es kann auch ein mit StoOpen () geöffnetes Objekt übergeben werden. Importierte Kachel-, Raster- und Vektorgrafiken (siehe Ressource importieren ) können mit StoExport () und StoReadMem () exportiert werden. Ist die in (alpha1) angegebene Datei bereits vorhanden, wird sie überschrieben.

Als Option kann _XmlSaveDefault (0) oder _XmlSavePure (1) angegeben werden. Standardmäßig erfolgt eine formatierte (mit Leerzeichen und Zeilenwechsel versehene) Ausgabe (int2 =_XmlSaveDefault). Mit _XmlSavePure wird keine Formatierung durchgeführt.

Wird in (handle3) ein Memory -Objekt angegeben, wird der Dateiname ignoriert und der Inhalt in das Objekt geschrieben. Der Inhalt wird an den bestehenden Inhalt angehängt. Sofern das Memory -Objekt schon Daten enthält, muss seine in (int4) angegebene Zeichenkodierung mit der bereits existierenden (Eigenschaft Charset) übereinstimmen. Ist dies nicht der Fall wird der Laufzeitfehler _ErrHdlInvalid erzeugt.

Bei der Angabe einer Zeichencodierung werden alle Zeichenketten in den Zeichencode gewandelt. Zusätzlich wird in dem Knoten des Dokuments (ID = _XmlNodeDocument) das Attribut "encoding" auf die entsprechende Zeichencodierung gesetzt.

Wird in (int5) ein Quellzeichensatz angegeben, wird der Inhalt in von diesem in den in (int4) angegebenen Zielzeichensatz oder den CONZEPT 16-Zeichensatz konvertiert. Ist kein Quellzeichensatz angegeben, wird der CONZEPT 16-Zeichensatz als Quellzeichensatz verwendet.

Konnte die externe Datei nicht geschrieben werden, wird ein _ErrFsi...-Fehlerwert zurückgegeben.

Beispiel:

sub WriteXML
(
aHdlMem : handle;
)

local
{
tXMLDoc : handle;
tXMLItemRoot : handle;
tXMLItem : handle;
tErr : int;
}

{
// XML-Dokument als Cte-Knoten anlegen
tXMLDoc # CteOpen(_CteNode);

// Cte-Knoten als XML-Dokument deklarieren
tXMLDoc->spID # _XmlNodeDocument;

// Standalone-Dokumentdeklaration
tXMLDoc->CteInsertNode('standalone', _XmlNodeAttribute, 'yes', _CteAttrib);

// Dokumenttyp-Deklaration
tXMLDoc->CteInsertNode('myRootElement', _XmlNodeDocumentType, 'SYSTEM "myDTD.dtd"');

// Element (Wurzel)
tXMLItemRoot # tXMLDoc->CteInsertNode('root', _XmlNodeElement, NULL);

// Element
tXMLItem # tXMLItemRoot->CteInsertNode('element', _XmlNodeElement, NULL);

// Attribut
tXMLItem->CteInsertNode('attribute', _XmlNodeAttribute, 'attrib-value', _CteAttrib);

// Kommentar
tXMLItemRoot->CteInsertNode('', _XmlNodeComment, 'comment');

// Text
tXMLItemRoot->CteInsertNode('', _XmlNodeText, 'text');

// CDATA
tXMLItemRoot->CteInsertNode('', _XmlNodeCDATA, 'CDATA');

// XML-Dokument in MemoryObjekt ablegen
tErr # tXMLDoc->XmlSave('', _XmlSaveDefault, aHdlMem, aHdlMem->spCharset);

// Cte-Knoten leeren freigeben
tXMLDoc->CteClear(true);
tXMLDoc->CteClose();

// Fehler bei XMLSave()
if (tErr != _ErrOk)
{
// ...
}
}

Das Resultat sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE myRootElement SYSTEM "myDTD.dtd">
<root>
<element attribute="attrib-value"/>
<!--comment-->
text
<![CDATA[CDATA]]>
</root>

Mögliche Laufzeitfehler:

  • _ErrHdlInvalid: Einer der übergebenen Deskriptoren ist ungültig.
  • _ErrValueInvalid: In (int2) ist ein ungültiger Wert oder das angegebene Memory -Objekt verfügt über einen anderen Zeichensatz als in (int4) angegeben.