XmlSave
obj -> XmlSave(alpha1[, int2[, handle3[, int4[, int5]]]]) : int
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:
intFehlerwert - 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.