Zugriff auf die XML-Struktur eines InDesign®-Dokumentes.
Ein allgemeines Beispiel zur Verwendung der Klasse xml finden sie hier.
Texte oder Rahmen eines Dokumentes können mit XML-Elementen verbunden werden. Die Methoden des Moduls erlauben Zugriff auf diese Elemente.
Skripte können auf das XML-Element ihres Textes oder Rahmens zugreifen. Die Zuordnung erfolgt über die automatische Zuordnung des Skriptes zu Texten und Rahmen. Das XML-Element eines Skriptes wird nach folgenden Schritten gesucht:Zur Bezeichnung von XML Elementen können sogenannte Pfade verwendet werden. XML Pfade sind aufgebaut wie Unixpfade. Es können relative Pfad (ausgehend vom eigenen Element) oder absolute Pfade (beginnend mit '/') verwendet werden. Folgende Beschreibungen sind zulässig:
Schlüsselwort | Beschreibung |
self | Bezeichnet das aktuelle XML Element eines XML-Skriptes, siehe oben. |
/ | Das oberste XML Element des Dokumentes, in der Regel Root |
.. | eine Ebene nach oben |
parent | Das Eltern-Element |
element[[i]] | Das 1-basierte i-te Element der aktuellen Ebene des Namens element. Die Angabe des Index ist optional, wird aber in eckigen Klammern angegeben, z.B. bezeichnet /Bibliothek/Book[4] das vierte Buch-Element unter Bibliothek. Fehlt die Angabe, wird das erste Element verwendet. |
first|next|prev|last [+-i] |
Das i-te Element hinter/vor dem angegebenen Geschwister. Die Angabe des Index ist optional, wird aber in eckigen Klammern angegeben, z.B. bezeichnet /Bibliothek/next[1] die übernächste Bibliothek |
first|next|prev|last [<tag>] |
Das nächste Element hinter/vor dem angegebenen Geschwister mit dem Namen tag. |
static int xml::set_document_attribute(
ItemRef docRef,
char* name,
char* value)
Setze oder aktualisiere ein Attribut des Root-Elements eines Dokuments.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder ErrorCode | |
docRef | ItemRef | - | Gültiger Verweis auf ein Dokument |
name | String oder char* | - | Name des Attributs |
value | String oder char* | - | Neuer Wert des Attributs |
static int xml::get_document_attribute(
ItemRef docRef,
char* name,
char* out)
Hole den Wert eines Attributes des Root-Elements eines Dokuments.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder ErrorCode | |
docRef | ItemRef | - | Gültiger Verweis auf ein Dokument |
name | String oder char* | - | Name des Attributs |
out | String oder char* | - | Variable für den Ergebnisstring |
static int xml::exec(ItemRef frameRef = 0, char* elementName = 0)
Ausführen eines Skriptes der XML-Struktur eines Rahmens. Die Elemente der XML-Struktur von Rahmen können Skript-Code als Werte bekommen. Mit exec können diese Skripte ausgeführt werden.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
frameRef | ItemRef | 0 | gültiger Dokumentrahmen 0 : aktueller Skriptrahmen |
elementName | String oder char* | 0 | Name des Elements, dessen Skript ausgeführt werden soll. Der Wert dieses Element muss aus gültigem cScript-Code bestehen. 0 oder "" : Erstes Element des Rahmens |
static int xml::link(
char* parent,
char* name,
int index,
...)
Verknüpfe den aktuellen Skriptrahmen bzw. das aktuelle Textmodell des Skriptes mit einem neuen XML-Element. Ist der Elementname noch nicht in der Palette 'Tags' enthalten, wird er automatisch eingefügt. Konnte das Element erfolgreich verknüpft werden, können danach beliebig viele Attribute mit Wert im Element angelegt werden.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
parent | String oder char* | - | absoluter XML-Pfad für das Eltern-Elementes des neuen XML-Elementes Existiert der Pfad nicht, wird er angelegt. Existiert für den Rahmen bereits ein XML-Element, wird es an die Stelle verschoben, auf die der Pfad zeigt. |
name | String oder char* | - | Name des Elementes Der Name eines XML-Elementes muss
muss mit einem Buchstaben beginnen und darf nur aus Buchstaben, Zahlen und '_' bestehen. Dem Pfad dürfen mit Leerzeichen getrennt die Schlüsselwörter noRename und/oder noMove vorangestelltwerden, sie nicht Bestandteil des Namens. Diese Teile legen fest, wie verfahren werden soll, wenn der Rahmen bereits ein XML-Elememt hat. noRename Bestehendes Element nicht umbenennen noMove Bestehendes Element nicht verschieben |
index | int | - | Index im Parent, -1 = letztes Element (0-basiert) |
⇨Beliebig viele Attribut-Wert-Paare dürfen folgen | |||
attr_name | String oder char* | - | Name eines Attributes, das zum Element hinzugefügt werden soll. Der Name eines XML-Attributes muss muss mit einem Buchstaben beginnen und darf nur aus Buchstaben, Zahlen und '_' bestehen. |
attr_value | String oder char* | - | Wert des Attributes attr_name |
siehe link_frame
static int xml::link_frame(
ItemRef fm,
char* parent,
char* name,
int index,
...)
Verknüpfe einen Dokumentrahmen mit einem neuen XML-Element. Ist der
Elementname noch nicht in der Palette 'Tags' enthalten, wird er automatisch eingefügt.
Konnte das Element erfolgreich verknüpft werden, können danach beliebig viele Attribute mit Wert im
Element angelegt werden.
Ist der Typ eines Rahmens noch nicht festgelegt, wird der Rahmen automatisch zu einem Textrahmen gemacht.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
fm | ItemRef | - | Rahmen, der verlinkt werden soll. Ist der Rahmentyp nicht festgelegt, wird der Rahmen zu einem Textrahmen gemacht. Der Inhalt der Referenz kann durch den Aufruf geändert werden. |
parent | String oder char* | - | absoluter XML-Pfad für das Eltern-Elementes des neuen XML-Elementes. Existiert der Pfad nicht, wird er angelegt. Existiert für den Rahmen bereits ein XML-Element, wird es an die Stelle verschoben, auf die der Pfad zeigt. |
name | String oder char* | - | Name des Elementes Der Name eines XML-Elementes muss
muss mit einem Buchstaben beginnen und darf nur aus Buchstaben, Zahlen und '_' bestehen. Dem Pfad dürfen mit Leerzeichen getrennt die Schlüsselwörter noRename und/oder noMove vorangestelltwerden, sie nicht Bestandteil des Namens. Diese Teile legen fest, wie verfahren werden soll, wenn der Rahmen bereits ein XML-Elememt hat. noRename Bestehendes Element nicht umbenennen noMove Bestehendes Element nicht verschieben |
index | int | - | Index im Parent, -1 = letztes Element (0-basiert) |
⇨Beliebig viele Attribut-Wert-Paare dürfen folgen | |||
attr_name | String oder char* | - | Name eines Attributes, das zum Element hinzugefügt werden soll. Der Name eines XML-Attributes muss muss mit einem Buchstaben beginnen und darf nur aus Buchstaben, Zahlen und '_' bestehen. |
attr_value | String oder char* | - | Wert des Attributes attr_name Werte müssen als Strings geliefert werden. Um eine Zahl in einen String zu konvertieren, verwenden Sie die Funktion sprintf (etwa sprintf (str, "%d", 123);). |
int main () { ItemList frames = itemlist::get_selected_frames (); int len = itemlist::length (frames); int i = 0; ItemRef frame = item::alloc (); int r, g, b; char attr_val1[255]; char attr_val2[255]; char attr_val3[255];
r = 0; g = 100; b = 100;
while (i < len) { // Hole den nächsten ausgewählten Rahmen itemlist::get (frames, frame, i++);
// Rahmen färben r = r+30; frame::color (frame, r, g, b);
// Wert der Attributes berechnen sprintf (attr_val1, "%d - 1", i); sprintf (attr_val2, "%d - 2", i); sprintf (attr_val3, "%d - 3", i);
// Rahmen mit einem XML-Element verbinden xml::link_frame ( frame, "/", "Mein_XML_Element", -1, "Wert 1", attr_val1, "Wert 2", attr_val2, "Wert 3", attr_val3); }
item::release (frame); itemlist::release (frames); }
static int xml::untag(
ItemRef frameRef,
int startPos,
int len)
Entferne das XML-Element eines Rahmens oder alle XML-Elemente eines Textbereiches des Rahmens.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
frameRef | ItemRef | - | Gültige Rahmenreferenz |
startPos | int | - | Startposition, ab der XML-Elemente entfernt werden sollen kTotalEnd Das Element des Rahmens löschen. Alle Unterelemente werden dabei ebenfalls entfernt. In diesem Fall muss der Rahmen kein Textrahmen sein. kSelection Nur Elemente des angegebenen Textbereiches löschen. Ist keine Textauswahl gesetzt oder befindet sich in einem anderen Rahmen, wird der Fehler 313 (noSelectionErr) zurückgegeben. sonst : 0-basierte Textposition. Die Position ist text-relativ, nicht platzhalter-relativ, bezieht sich also auf den gesamten Text. Alle XML-Unterelemente, die in den angegebenen Textbereich zeigen werden entfernt. |
len | int | - | Länge des Bereiches, in dem Elemente gelöscht werden können. Bei startPos gleich kTotalEnd oder kSelection hat der Parameter keine Bedeutung. |
Entferne das Element des Rahmen inklusive aller Unterelemente.
#include "internal/text.h" #include "internal/types.h"
int main () { xml::untag (gFrame, kTotalEnd, 0); return 0; }
Entferne nur Elemente, die in den Text des Rahmens zeigen.
#include "internal/text.h" #include "internal/types.h"
int main () { xml::untag (gFrame, 0, kEnd); return 0; }
static int xml::path(
ItemRef frameRef,
char* path,
char* elementName = 0,
int* indexInParent = 0)
Ermittle den Pfad des XML-Elementes eines Rahmens.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
frameRef | ItemRef | - | gültiger Dokumentrahmen |
path | String oder char* | - | Pfad zum XML-Element des Rahmens (oder leer) |
elementName | String oder char* | 0 | Name des XML-Element des Rahmens (oder leer) |
indexInParent | int* | 0 | 1-basierter Index im Elternelement des XML-Elementes des Rahmens |
static int xml::path_elem(
XMLElement elem,
char* path,
char* elementName = 0,
int* indexInParent = 0)
Ermittle den Pfad des XML-Elementes XML-Elementes der XML-Struktur eines Dokumentes.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
elem | XMLElement | - | gültiges XML-Element, z.B. aus get_element_by_path |
path | String oder char* | - | Pfad zum XML-Element (oder leer) |
elementName | String oder char* | 0 | Name des XML-Element (oder leer) |
indexInParent | int* | 0 | 1-basierter Index im Elternelement des XML-Elementes |
int main () { XMLElement elem = 0; char path [5000], name [5000]; int index;
xml::get_element_by_path (0, &elem, "/abc/def/ghi[7]"); xml::path_elem (elem, value, name, &index); wlog ("", " Path '%s/%s[%d]\n", value, name, index);
xml::release (elem); return 0; }
static int xml::add_attribute(
ItemRef frameRef,
char* attrName,
char* attrVal)
Ändern oder Anfügen eines Attributes zum XML-Element eines Rahmens.
Der Rahmen muß zuvor natürlich überhaupt ein XML-Element in der Struktur des Dokumentes haben!
Zum Anlegen oder Ändern eines XML-Attributes im Dokument verwenden Sie folgende Aufrufe
XMLElement elem = 0;
xml::create_element (&elem, 0, "/", 1); xml::add_attribute_elem (elem, "my_elem", "my value");
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
frameRef | ItemRef | - | gültiger Dokumentrahmen 0 : aktueller Skriptrahmen |
attrName | String oder char* | - | Attributname (XML-konformer Elementname) |
attrVal | String oder char* | - | Wert des Attributes |
static int xml::add_attribute_elem(
XMLElement elem,
char* attrName,
char* attrVal)
Anfügen eines Attributes an ein XML-Element der XML-Struktur eines Dokumentes. Existiert ein Attribut des gegebenen Namens bereits, wird dessen Wert geändert.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
XMLElement | ItemRef | - | gültiges XML-Element |
attrName | String oder char* | - | Attributname (XML-konformer Elementname) |
attrVal | String oder char* | - | (Neuer) Wert des Attributes |
int main () { XMLElement elem = 0; char value [5000];
xml::get_element_by_path (0, &elem, "/abc/def/ghi/aaa[9]");
xml::sattribute_elem (elem, "AAA_9", value); printf ("A1 (%s)\n", value);
xml::add_attribute_elem (elem, "AAA_9", "Value aaa 9"); xml::sattribute_elem (elem, "AAA_9", value); printf ("A2 (%s)\n", value);
xml::add_attribute_elem (elem, "AAA_9", "New value aaa 9"); xml::sattribute_elem (elem, "AAA_9", value); printf ("A3 (%s)\n", value);
xml::release (elem); return 0; }
static int xml::attribute_exists(char* xml_path, char* attribute)
Hat das XML-Element ein bestimmtes Attribut?
Die Namen von Attributen können Sie mit einer der Funktionen iattribute, iattribute_elem, ... und der Angabe des Attribut-Indexes ermitteln.
Name | Typ | Default | Beschreibung |
Return | int | 1 Attribut existiert 0 existiert nicht |
|
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
attribute | String oder char* | - | Name des gesuchten Attributes |
result = xml::attribute_exists (path, attribute);
static int xml::attribute_exists_frame(ItemRef fm, char* attribute)
Hat der Rahmen ein XML-Element mit einem bestimmten Attribut?
Die Namen von Attributen können Sie mit einer der Funktionen iattribute, iattribute_elem, ... und der Angabe des Attribut-Indexes ermitteln.
Name | Typ | Default | Beschreibung |
Return | int | 1 Attribut existiert 0 existiert nicht |
|
fm | ItemRef | - | Rahmenreferenz |
attribute | String oder char* | - | Name des gesuchten Attributes |
result = xml::attribute_exists (path, attribute);
static int xml::attribute_exists_elem(XMLElement xmlElement, char* attribute)
Hat das XML-Element ein bestimmtes Attribut?
Die Namen von Attributen können Sie mit einer der Funktionen iattribute, iattribute_elem, ... und der Angabe des Attribut-Indexes ermitteln.
Name | Typ | Default | Beschreibung |
Return | int | 1 : Attribut existiert 0 : existiert nicht |
|
xmlElement | XMLElement | - | Gültiger Verweis auf ein XMLElement eines Dokumentes |
attribute | String oder char* | - | Name des gesuchten Attributes |
Beispiel
Vollständiges Beispiel
static int xml::count_attributes(char* xml_path)
Anzahl der Attribute eines XML-Elementes.
Die Namen von Attributen können Sie mit einer der Funktionen iattribute, iattribute_elem, ... und der Angabe des Attribut-Indexes ermitteln.
Name | Typ | Default | Beschreibung |
Return | int | Anzahl der Attribute 0 : Das Element wurde nicht gefunden oder hat keine Attribute |
|
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
static int xml::count_attributes_frame(ItemRef fm)
Anzahl der Attribute eines XML-Elementes eines Rahmens.
Die Namen von Attributen können Sie mit einer der Funktionen iattribute, iattribute_elem, ... und der Angabe des Attribut-Indexes ermitteln.
Name | Typ | Default | Beschreibung |
Return | int | Anzahl der Attribute 0 : Das Element wurde nicht gefunden oder hat keine Attribute |
|
fm | ItemRef | - | Rahmenreferenz |
static int xml::count_attributes_elem(XMLElement xmlElement)
Anzahl der Attribute eines XML-Elementes.
Die Namen von Attributen können Sie mit einer der Funktionen iattribute, iattribute_elem, ... und der Angabe des Attribut-Indexes ermitteln.
Name | Typ | Default | Beschreibung |
Return | int | Anzahl der Attribute 0 : Das Element wurde nicht gefunden oder hat keine Attribute |
|
xmlElement | XMLElement | - | Gültiger Verweis auf ein XMLElement eines Dokumentes |
Beispiel
Vollständiges Beispiel
static int xml::remove_attributes_elem(
XMLElement xmlElement,
char* name,
int index = -1)
Löschen von Attributen eines XML-Elementes der XML-Struktur eines Dokumentes.
Die Namen von Attributen können Sie mit einer der Funktionen iattribute, iattribute_elem, ... und der Angabe des Attribut-Indexes ermitteln.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
xmlElement | XMLElement | - | Gültiges XML-Element einer XML-Struktur |
name | String oder char* | - | Name des Attributes, das entfernt werden soll 0 : Index verwenden |
index | int | -1 | Index des Attributes, das entfernt werden soll.
Der Index wird nur ausgewertet, wenn der Name 0 oder "" ist. >= 0 : 0-basierter Index des Attributes im Element -1 : Alle Attribute entfernen |
int main () { XMLElement elem = 0;
xml::get_xmlelement_by_path (0, &elem, "/abc/def/ghi/WWWW"); xml::remove_attributes_elem (elem, 0, -1); xml::release (elem);
return 0; }
static int xml::iattribute(char* xml_path, char* attribute)
Hole den Wert eins XML-Attributes als ganze Zahl. Das Attribut kann über seinen Namen oder einen Index angesprochen werden.
Name | Typ | Default | Beschreibung |
Return | int | Wert des XML-Attributes als int oder -1 | |
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
⇨ Attribut über seinen Namen auswählen | |||
attribute | String oder char* | - | Name eines Attributes |
⇨ Attribut über Index auswählen | |||
index | int | - | 0-basierter Attributindex, siehe count_attributes |
name | String oder char* | - | Nach der Ausführung enthält die Variable den Namen des Attributes 0 : Namen nicht ermitteln sonst : Allokierter Speicher für den Namen |
Namensbasierte Elementauswahl
showmessage ("%d", xml::iattribute (xml_path, attr));
Indexbasierte Elementauswahl Für den Namen muss ein Parameter angegeben werden. Der Wert des Namenparameters darf 0 sein.
char name[256];
showmessage ("%s = %d", xml::iattribute (xml_path, 0, name), name);
static int xml::iattribute_frame(ItemRef fm, char* attribute)
Hole den Wert eines XML-Attributes des XML-Objektes eines Rahmens als ganze Zahl. Das Attribut kann über seinen Namen oder einen Index angesprochen werden.
Name | Typ | Default | Beschreibung |
Return | int | Wert des XML-Attributes oder -1 | |
fm | ItemRef | Gültiger Dokumentrahmen | |
⇨ Attribut über seinen Namen auswählen | |||
attributes | String oder char* | - | Name eines Attributes |
⇨ Attribut über Index auswählen | |||
index | int | - | 0-basierter Attributindex, siehe count_attributes |
name | String oder char* | - | Nach der Ausführung enthält die Variable den Namen des Attributes 0 : Namen nicht ermitteln sonst : Allokierter Speicher für den Namen |
Namensbasierte Elementauswahl
showmessage ("%d", xml::iattribute_frame (gFrame, attr));
Indexbasierte Elementauswahl Für den Namen muss ein Parameter angegeben werden. Der Wert des Namenparameters darf 0 sein.
char name[256];
showmessage("%s = %d", name, xml::iattribute_frame (gFrame, 0, name));
static int xml::iattribute_elem(XMLElement xmlElement, char* attribute)
Wie iattribute_frame, aber als Suchreferenz wird das XMLElement selbst übergeben, nicht sein Rahmen.
Beispiel
Vollständiges Beispiel
static char* xml::sattribute(
char* xml_path,
char* attribute,
char* result)
Hole den Wert eins XML-Attributes. Das Attribut kann über seinen Namen oder einen Index angesprochen werden.
Name | Typ | Default | Beschreibung |
Return | String oder char* | Im Fehlerfall gibt die Funktion 0 zurück, sonst die Variable result. | |
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
⇨ Attribut über seinen Namen auswählen | |||
attribute | String oder char* | - | Name eines Attributes |
result | String oder char* | - | reservierter Speicher für das Ergebnis Leerstring, wenn kein Element oder Attribut nicht gefunden |
⇨ Attribut über Index auswählen | |||
index | int | - | 0-basierter Attributindex, siehe count_attributes |
name | String oder char* | - | Nach der Ausführung enthält die Variable den Namen des Attributes 0 : Namen nicht ermitteln sonst : Allokierter Speicher für den Namen |
result | String oder char* | - | reservierter Speicher für das Ergebnis Leerstring, wenn kein Element oder Attribut nicht gefunden |
Namensbasierte Elementauswahl
char val[2000];
showmessage ("%s", xml::sattribute_frame (xml_path, attr, val));
Indexbasierte Elementauswahl Für den Namen muss ein Parameter angegeben werden. Der Wert des Namenparameters darf 0 sein.
char name[256]; char val[2000];
showmessage ("%s = %s,", xml::attribute (xml_path, 0, name, val), name);
static char* xml::sattribute_frame(
ItemRef fm,
char* attribute,
char* result)
Hole den Wert eines XML-Attributes des XML-Elementes eines Rahmens. Das Attribut kann über seinen Namen oder einen Index angesprochen werden.
Name | Typ | Default | Beschreibung |
Return | String oder char* | Wert des XML-Attributes oder (im Fehlerfall) 0. | |
fm | ItemRef | Gültiger Dokumentrahmen | |
⇨ Attribut über seinen Namen auswählen | |||
attribute | String oder char* | - | Name eines Attributes |
result | String oder char* | - | Reservierter Speicher für das Ergebnis |
⇨ Attribut über Index auswählen | |||
index | int | - | 0-basierter Attributindex, siehe count_attributes |
name | String oder char* | - | Nach der Ausführung enthält die Variable den Namen des Attributes 0 : Namen nicht ermitteln sonst : Allokierter Speicher für den Namen |
result | String oder char* | - | Reservierter Speicher für das Ergebnis 0 : Soll nur der Name ermittelt werden, kann der Parameter mit 0 angegeben werden. |
Namensbasierte Elementauswahl
char val[2000];
showmessage("%s", xml::attribute_frame (gFrame, attr, val));
Indexbasierte Elementauswahl Für den Namen muss ein Parameter angegeben werden. Der Wert des Namenparameters darf 0 sein.
char name[256]; char attr[256];
showmessage("%s = %s", name, xml::sattribute_frame(gFrame, 0, name, attr));
static char* xml::sattribute_elem(
XMLElement xmlElement,
char* attribute,
char* result)
Wie sattribute_frame, aber als Suchreferenz wird das XMLElement selbst übergeben, nicht sein Rahmen.
Beispiel
Vollständiges Beispiel
static float xml::fattribute(char* xml_path, char* attribute)
Hole den Wert eins XML-Attributes als reelle Zahl. Das Attribut kann über seinen Namen oder einen Index angesprochen werden.
Name | Typ | Default | Beschreibung |
Return | float | Wert des XML-Attributes als float oder -1.0 | |
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
⇨ Attribut über seinen Namen auswählen | |||
attribute | String oder char* | - | Name eines Attributes |
⇨ Attribut über Index auswählen | |||
index | int | - | 0-basierter Attributindex, siehe count_attributes |
name | String oder char* | - | Nach der Ausführung enthält die Variable den Namen des Attributes 0 : Namen nicht ermitteln sonst : Allokierter Speicher für den Namen |
Namensbasierte Elementauswahl
showmessage ("%f", xml::fattribute_frame (xml_path, attr));
Indexbasierte Elementauswahl Für den Namen muss ein Parameter angegeben werden. Der Wert des Namenparameters darf 0 sein.
char name[256];
showmessage ("%s = %f", xml::fattribute (xml_path, 0, name), name);
static float xml::fattribute_frame(ItemRef fm, char* attribute)
Hole den Wert eines XML-Attributes des XML-Elementes eines Rahmens als reelle Zahl. Das Attribut kann über seinen Namen oder einen Index angesprochen werden.
Name | Typ | Default | Beschreibung |
Return | float | Wert des XML-Attributes oder -1 | |
fm | ItemRef | - | Gültiger Dokumentrahmen |
⇨ Attribut über seinen Namen auswählen | |||
attribute | String oder char* | - | Name eines Attributes |
⇨ Attribut über Index auswählen | |||
index | int | - | 0-basierter Attributindex, siehe count_attributes |
name | String oder char* | - | Nach der Ausführung enthält die Variable den Namen des Attributes 0 : Namen nicht ermitteln sonst : Allokierter Speicher für den Namen |
Namensbasierte Elementauswahl
showmessage("%f", xml::fattribute_frame (gFrame, attr));
Indexbasierte Elementauswahl Für den Namen muss ein Parameter angegeben werden. Der Wert des Namenparameters darf 0 sein.
char name[256]; char attr[256];
showmessage("%s = %f", name, xml::fattribute_frame(gFrame, 0, name, attr));
static float xml::fattribute_elem(XMLElement xmlElement, char* attribute)
Wie fattribute_frame, aber als Suchreferenz wird das XMLElement selbst übergeben, nicht sein Rahmen.
Beispiel
Vollständiges Beispiel
static int xml::getint(
char* xml_path,
int* outStartPos = 0,
int* outLen = 0)
Hole den Text mit dem ein XML-Element verknüpft ist als ganze Zahl.
Name | Typ | Default | Beschreibung |
Return | int | Wert des XML-Attributes als int oder -1 | |
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
outStartPos | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die (0-basierte) Textposition, an der das XML-Element im Text beginnt. |
outLen | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die Länge des Textes, mit dem das XML-Element im Text verknüpft ist. |
int f = xml::getint (xml_path);
static int xml::getint_frame(
ItemRef frameRef,
char* xml_path,
int* outStartPos = 0,
int* outLen = 0)
Hole den Text mit dem ein XML-Element eines Rahmens verknüpft ist als ganze Zahl.
Name | Typ | Default | Beschreibung |
Return | int | Wert des XML-Attributes als int oder -1 | |
frameRef | ItemRef | - | Verweis auf einen Dokumentrahmen |
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
outStartPos | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die (0-basierte) Textposition, an der das XML-Element im Text beginnt. |
outLen | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die Länge des Textes, mit dem das XML-Element im Text verknüpft ist. |
static int xml::getint_elem(
XMLElement xmlElement,
int* outStartPos = 0,
int* outLen = 0)
Wie getint_frame, aber das gewünschte XML-Element wird nicht über einen Rahmen und einen XML-Pfad sondern direkt übergeben.
Beispiel
Vollständiges Beispiel
static float xml::getfloat(
char* xml_path,
int* outStartPos = 0,
int* outLen = 0)
Hole den Text mit dem ein XML-Element verknüpft ist als reelle Zahl.
Name | Typ | Default | Beschreibung |
Return | float | Wert des XML-Attributes als int oder -1 | |
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
outStartPos | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die (0-basierte) Textposition, an der das XML-Element im Text beginnt. |
outLen | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die Länge des Textes, mit dem das XML-Element im Text verknüpft ist. |
float f = xml::getfloat (xml_path);
static float xml::getfloat_frame(
ItemRef frameRef,
char* xml_path,
int* outStartPos = 0,
int* outLen = 0)
Hole den Text mit dem ein XML-Element eines Rahmens verknüpft ist als reelle Zahl.
Name | Typ | Default | Beschreibung |
Return | float | Wert des XML-Attributes als int oder -1 | |
frameRef | ItemRef | - | Verweis auf einen Dokumentrahmen |
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
outStartPos | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die (0-basierte) Textposition, an der das XML-Element im Text beginnt. |
outLen | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die Länge des Textes, mit dem das XML-Element im Text verknüpft ist. |
static float xml::getfloat_elem(
XMLElement xmlElement,
int* outStartPos = 0,
int* outLen = 0)
Wie getfloat_frame, aber das gewünschte XML-Element wird nicht über einen Rahmen und einen XML-Pfad sondern direkt übergeben.
Beispiel
Vollständiges Beispiel
static char* xml::strcpy(
char* xml_path,
char* result,
int maxlen = 0,
int* outStartPos = 0,
int* outLen = 0,
int fmt = 0)
Hole den Text mit dem ein XML-Element verknüpft ist.
Name | Typ | Default | Beschreibung |
Return | String oder char* | Zur besseren Verwendung der Funktion wird result als Rückgabewert verwendet. | |
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
result | String oder char* | - | Reservierter Speicher für das Ergebnis |
maxlen | int | beliebig | Maximale Anzahl Bytes für das Ergebnis 0 Beliebige Länge |
outStartPos | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die (0-basierte) Textposition, an der das XML-Element im Text beginnt. |
outLen | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die Länge des Textes, mit dem das XML-Element im Text verknüpft ist. |
fmt | int | kExportPlain | Format des Ergebnisstrings. Zur Beschreibung der Exportformate siehe textmodel::gettext . |
char s[256]; xml::strcpy (xml_path, s, 255);
static char* xml::strcpy_frame(
ItemRef frameRef,
char* xml_path,
char* result,
int maxlen = 0,
int* outStartPos = 0,
int* outLen = 0,
int fmt = 0)
Hole den Text mit dem ein XML-Element eines Rahmens verknüpft ist.
Name | Typ | Default | Beschreibung |
Return | String oder char* | Zur besseren Verwendung der Funktion wird result als Rückgabewert verwendet. Wert des XML-Attributes. | |
frameRef | ItemRef | - | Verweis auf einen Dokumentrahmen |
xml_path | String oder char* | - | relativer XML-Pfad vom eigenen XML-Element oder absoluter XML-Pfad |
result | String oder char* | - | Reservierter Speicher für das Ergebnis |
maxlen | int | 0 | Maximale Anzahl Bytes für das Ergebnis 0: Beliebige Länge |
outStartPos | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die (0-basierte) Textposition, an der das XML-Element im Text beginnt. |
outLen | int* | 0 | Nach erfolgreicher Ausführung der Funktion enthält die Variable die Länge des Textes, mit dem das XML-Element im Text verknüpft ist. |
fmt | int | kExportPlain | Format des Ergebnisstrings. Für die Exportformate siehe textmodel::gettext . |
static char* xml::strcpy_elem(
XMLElement xmlElement,
char* result,
int maxlen = 0,
int* outStartPos = 0,
int* outLen = 0,
int fmt = 0)
Wie strcpy_frame, aber das gewünschte XML-Element wird nicht über einen Rahmen und einen XML-Pfad sondern direkt übergeben.
Beispiel
Vollständiges Beispiel
static int xml::get_element(
ItemRef frameRef,
XMLElement* xmlElement = 0,
char* path = 0)
Hole das XMLElement, das mit diesem Rahmen verknüpft ist. Optional können Sie einen XML-Pfad angeben, mit dem ein Unterelement des übergebenen Rahmens ermittelt werden kann.
Name | Typ | Default | Beschreibung |
Return | int | 0 : Element gefunden sonst : Fehlercode |
|
frameRef | ItemRef | - | Gültige Rahmenreferenz |
xmlElement | XMLElement* | 0 | Zeiger auf eine Variable vom Typ XMLElement (&elem). |
path | String oder char* | 0 | XML-Pfad zur Bestimmung des Elementes, wenn nicht das Element des Rahmens selbst gesucht wird. |
Beispiel
Vollständiges Beispiel
static int (
ItemRef frameRef,
XMLElement* xmlElement = 0,
char* path = 0)
static int xml::get_element_by_path(
ItemRef docRef,
XMLElement* xmlElement = 0,
char* path = 0)
Hole ein über einen XML-Pfad definiertes XML-Element aus der XML-Struktur eines Dokumentes.
Name | Typ | Default | Beschreibung |
Return | int | 0 : Element gefunden sonst : Fehlercode |
|
docRef | ItemRef | - | Dokumentreferenz 0 : aktuelles Dokument |
xmlElement | XMLElement* | - | Ergebnis. Zeiger auf eine gültige Variable vom Typ XMLElement (&elem). |
path | String oder char* | - | XML-Pfad zur Bestimmung des Elementes. |
int main () { XMLElement elem = 0; char value [5000];
xml::get_element_by_path (0, &elem, "/abc/def/ghi/aaa[8]"); xml::sattribute_elem (elem, "Name_AAA_8", value); wlog ("# Value (%s)\n", value);
xml::release (elem); return 0; }
static int xml::create_element(
XMLElement* out_elem,
ItemRef docRef,
char* path,
int useExisting = 1)
Erzeuge ein neues XMLElement in der XML-Struktur des Dokumentes. Existiert das Element, kann wahlweise auch das bereits bestehende Element zurückgegeben werden.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
out_elem | XMLElement* | - | Zeiger auf eine Variable vom Typ XMLElement (also z.B. &aml;elem). Im Erfolgsfall enthält die Variable das neu erzeugte (oder gefundene) Element |
docRef | ItemRef | - | Dokument, das die XML-Struktur enthält 0 : aktuelles Dokument |
path | String oder char* | - | Vollständiger Pfad des XML-Elementes. Existiert der Pfad nicht, wird er automatisch angelegt.
Bei Angaben mit Index (z.B. [10]) werden dabei fehlende Elemente bis zu Erreichen des Index angelegt. Bitten achten Sie darauf, dass die einzelnen Namen im Pfad XML-konforme Bezeichner sind! |
useExisting | int | 1 | Verhalten, wenn das Element bereits existiert: 1 : Das existierende Element zurückgeben 0 : Trotzdem ein neues Element anlegen |
int main () { XMLElement elem = 0; int res; char path [5000], name [5000], value [5000]; int index;
xml::create_element (&elem, 0, "/abc/def/ghi/aaa");
xml::path_elem (elem, path, name, &index); showmessage ("<%s/%s> : %d", path, name, index);
xml::add_attribute_elem (elem, "Name_AAA", "Value AAA"); xml::sattribute_elem (elem, "Name_AAA", value); showmessage ("%s", value);
xml::release (elem); return 0; }
static int xml::delete_element(XMLElement elem, int autoRelease = 1)
Entferne ein XMLElement mit allen Unterelementen aus der XML-Struktur des Dokumentes. Beim Löschen von XML-Elementen, die mit Dokumentinhalt verlinkt sind, z.B. mit einem Rahmen, bleibt dieser Dokumentinhalt erhalten.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
elem | XMLElement | - | Gültiges XML-Element aus der XML-Struktur eines Dokumentes |
autoRelease | int | 1 | Objekt automatisch auch aus dem Arbeitsspeicher löschen 1 : Ja 0 : Nein. Sie können das Element auch mit xml::release aus dem Arbeitsspeicher freigeben |
int main () { XMLElement elem = 0;
xml::get_element_by_path (0, &elem, "/abc/def/Root"); xml::delete_element (elem);
return 0; }
static int xml::count_children(XMLElement xmlElement)
Zähle die direkten Unterelmente eines XML-Elementes.
Name | Typ | Default | Beschreibung |
Return | int | Anzahl der direkten Kinder eines XMLElementes | |
xmlElement | XMLElement | - | Gültiger Verweis auf ein XMLElement eines Dokumentes |
Beispiel
Vollständiges Beispiel
static int xml::get_child(
ItemRef xmlElement,
int index,
XMLElement* childRef)
Hole ein Unterelement eines XML-Elementes.
Name | Typ | Default | Beschreibung |
Return | int | 0 : Element gefunden sonst : Fehlercode |
|
xmlElement | XMLElement | - | Gültiger Verweis auf ein XMLElement eines Dokumentes |
index | int | - | 0-basierter Index |
childRef | XMLElement | 0 | Zielvariable. Die Variable darf fehlen oder 0 sein, in diesem Fall wird lediglich geprüft, ob das gesuchte Element existiert. |
Beispiel
Vollständiges Beispiel
static int xml::get_parent(ItemRef xmlElement, XMLElement* parentRef)
Hole das Elternelement eines XML-Elementes.
Name | Typ | Default | Beschreibung |
Return | int | 0 : Element gefunden sonst : Fehlercode |
|
xmlElement | XMLElement | - | Gültiger Verweis auf ein XMLElement eines Dokumentes |
parent | XMLElement | 0 | Zielvariable. Die Variable darf fehlen oder 0 sein, in diesem Fall wird lediglich geprüft, ob das gesuchte Element existiert. |
Beispiel
Vollständiges Beispiel
static char* xml::get_name(XMLElement xmlElement)
Hole den Namen eines XML-Elementes.
Name | Typ | Default | Beschreibung |
Return | String oder char* | "" : Fehler sonst : Name des Elementes. Der Rückgabewert darf nicht verändert werden und wird bei folgenden Aufrufen der Funktion überschrieben. Hier finden Sie Informationen zu readonly-Rückgaben von Funktionen. |
|
xmlElement | XMLElement | - | Gültiger Verweis auf ein XMLElement eines Dokumentes |
Um den Namen eines XML-Elementes aufzuheben, kopieren Sie ihn in eine lokale Variable:
char name[512];
:
strcpy (name, xml::get_name (elem));
Beispiel 2
Vollständiges Beispiel
static int xml::release(XMLElement xmlElement)
Freigabe eines XML-Elementes aus dem Skriptspeicher. Die Funktionen get_element, get_parent und get_child reservieren Skriptspeicher für die XML-Elemente, die sie erhalten. Dieser Speicher kann hier wieder freigegeben werden. Wenn Sie eine XMLElement-Variable nach release wieder verwenden wollen, muss sie unbedingt auf 0 zurückgesetzt werden.
Name | Typ | Default | Beschreibung |
Return | int | 0 : Element gelöscht sonst : Fehlercode |
|
xmlElement | XMLElement | - | Gültiger Verweis auf ein XMLElement eines Dokumentes. |
Zur Wiederverwendung einer XMLElement-Variable nach release muss diese unbedingt wieder auf 0 zurückgesetzt werden!
XMLElement elem;
:
xml::release (elem); elem = 0;
Beispiel2
Vollständiges Beispiel
static int xml::is_textlink(
XMLElement xmlElement,
int* startPos = 0,
int* len = 0,
int* isTable = 0,
int* isInline = 0)
Zeigt das XML-Element auf ein Textstück des Dokumentes?
Name | Typ | Default | Beschreibung |
Return | int | 0 : Kein gültige Element, das Element hat keinen Inhalt, der Inhalt ist ein Dokumentrahmen
(Grafik oder Text) 1 : Ja |
|
xmlElement | XMLElement | - | Gültiger Verweis auf ein XMLElement eines Dokumentes |
startPos | int* | 0 | (Ausgabe, nur bei Text-, Tabellen- und Inline-Elementen) Position des Textanfanges, auf den das Element zeigt |
len | int* | 0 | (Ausgabe, nur bei Text-, Tabellen- und Inline-Elementen) Länge des Textes, auf den das Element zeigt |
isTable | int* | 0 | (Ausgabe, nur bei Text-, Tabellen- und Inline-Elementen) Ist das Element mit einer Tabelle verknüpft (1) oder nicht (0) |
isInline | int* | 0 | (Ausgabe, nur bei Text-, Tabellen- und Inline-Elementen) Ist das Element mit einem verankerten verknüpft (1) oder nicht (0) |
Beispiel
Vollständiges Beispiel
static int xml::export_placeholder(
DBC dbc = 0,
int userID = 0,
char* path = "",
char* name = "")
Exportiere die Platzhalterdefinitionen der Datenbank in eine XML-Datei. Die Exportdatei erhält, wenn nichts anderes
angegeben ist, den Namen placeholder.xml und wird im aktuellen XML-Datenordner abgelegt.
Die Aktionen der Platzhalter werden im Ordner actions neben der Datei abgelegt.
Der Befehl ist nur für Mitarbeiter und Partner von WERK II implementiert.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
dbc | DBC | 0 | Datenbank, aus der exportiert werden soll 0 : Verwende die aktuelle Datenbankverbindung |
userID | int | 0 | Exportiere nur die Platzhalter dieses Benutzers. Die aktuelle BenutzerID der Verbindung kann
mit sql::userid ermittelt werden. 0 : Alle Platzhalter werden unabhängig von der Benutzerzuordnung exportiert |
path | String oder char* | "" | Einstiegspfad für den Export. Leerstring : Verwende den aktuellen XML-Datenordner, wie er in inDesign® eingestellt ist. |
name | String oder char* | "" | Name der XML-Datei Leerstring : placeholder.xml |
static int xml::export_action(
DBC dbc = 0,
int actionID = 0,
char* tbl = "",
char* attr = "",
char* xmlpath = "")
Exportiere eine Aktion der Datenbank in eine verschlüsselte Textdatei. Aktionen werden immer kodiert und unter dem
Namen actionID.crpt exportiert. Existiert eine Datei dieses Namens schon, wird sie überschrieben.
Der Befehl ist nur für Mitarbeiter und Partner von WERK II implementiert.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
dbc | DBC | - | Datenbank, aus der exportiert werden soll 0 : Verwende die aktuelle Datenbankverbindung |
actionID | int | - | ID der Aktion, die exportiert werden soll (select statement from actions where id = actionID) |
xmlpath | String oder char* | "" | Einstiegspfad für den Export. Leerstring : Der aktuelle Pfad der XML-Daten wird verwendet, siehe xmlquery::app_path |
subfolder | String oder char* | "actions" | Unterordner in path, in dem die Aktion abgelegt werden soll. |
static int xml::export_actions(
DBC dbc,
char* selectCmd,
char* xmlPath = "",
char* subfolder = "actions")
Exportiere eine Auswahl von Aktionen der Datenbank. Aktionen werden immer kodiert und unter dem
Namen actionID.crpt exportiert. Existiert eine Datei dieses Namens schon, wird sie überschrieben.
Der Befehl ist nur für Mitarbeiter und Partner von WERK II implementiert.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
dbc | DBC | - | Datenbank, aus der exportiert werden soll 0 : Verwende die aktuelle Datenbankverbindung |
selectCmd | String oder char* | - | Vollständige select -Anweisung zur Ermittlung der IDs der Aktionen. Der Befehl muss als erste Ergebnisspalte die IDs der gefundenen Aktionen liefern. |
xmlpath | String oder char* | "" | Einstiegspfad für den Export. Leerstring : Der aktuelle Pfad der XML-Daten wird verwendet, siehe xmlquery::app_path |
subfolder | String oder char* | "actions" | Unterordner in path, in dem die Aktion abgelegt werden soll. |
Exportiere alle Aktionen der Datenbank
xml::export_actions (0, "select id from actions where id > 0");
static int xml::export_(
DBC dbc,
char* selectCmd,
char* xmlPath,
char* filename,
char* root = "",
char* parent = "",
int lowerCase = 1)
Allgemeiner Datenexport aus der Datenbank in XML. Die Dateien werden im folgenden Format erzeugt
<root> <parent> <ATTR> </ATTR> <!-- ... --> </parent> <!-- ... --> </root>
Die Namen für das Root- und die jeweiligen Parentelemente werden entweder aus dem Dateinamen ermittelt oder können
als Parameter der Funktion übergeben werden. Werden die Bezeichner ermittelt, wird als Root-Name der Dateiname ohne
Dateierweiterung und als Parent-Name der Root-Name um einen Buchstaben verkürzt verwendet.
Ist der Dateiname panelstatements.xml, wird das Root-Element panelstatements genannt und das Parentelement
heißt jeweils panelstatement.
Die Elemente des Exportes heisn wie die Spalten des Selects. Unter Oracle werden die Spaltennamen automatisch in Großbuchstaben geliefert. Die Namen können beim Export in Kleinbuchstaben umgewandelt werden (Parameter lowerCase). Enthalten die Namen Zeichen, die der XML-Bezeichnerkonvention widersprechen, werden diese Zeichen in Underscores (_) umgewandelt. Zum Schachteln von XML-Elementen können in den Select direkte Strings eingefügt werden. Hier ein Beispiel:
select a.id, '<Type>', d.id, d.name, '</Type>', a.name from ...
erzeugt etwa folgende Ausgabe
<id>123</id> <Type> <id>1</id> <name>Type-name</name> <Type> <name>kahsgd<name>
Binärdaten der Datenbank (BLOB) werden in Dateien exportiert. Als Ziel wird jeweils der Unterordner
filename/attribut verwendet. Diese Ordner werden automatisch angelegt. Als Dateiname wird die ID des
Datensatzes verwendet. In die XML-Datei wird der lokale Pfad auf die Exportdatei als XML-Attribut src
eingetragen, also etwa
.
Für die Ordnernamen
werden die oben beschriebenen Umwandlungen wie für die Elementnamen vorgenommen.
Damit beim Export die richtigen Dateitypen (Dateiendung unter Windows, Dateityp und -creator und/oder Dateiendung unter
Mac OSX) erzeugt werden, können Zuordnungen zwischen Tabellenattributen und Dateiendungen gemacht werden.
Beim Export von konstanten Zahlen wie z.B. select id, 1401, ... muss ein Spaltenname angegeben werden. Außdem
muss der Wert so konvertiert werden, dass keine Kommazahl zurückgegeben wird, denn Oracle erkennt solche Spalten intern
als Kommazahlen :
.
Die Zuordnungen zwischen Dateiendung und -typ/-creator unter Mac OSX werden automatisch gemacht nach folgender
Aufzählung.
Dateiendung | Type | Creator | Programm |
indd | IDd3 | InDn | InDesign® |
psd | 8BIM | 8BIM | Photoshop |
psd | 8BPS | ||
pict | PICT | ||
tiff | TIFF | ||
gif | GIFf | ||
eps | EPSF | ||
targa | TPIC | ||
jpg | JPEG | ||
psd | 8BPS | ||
png | PNGF | ||
CARO | Acrobat Reader | ||
txt | text | TEXT | TextEdit |
rtf |
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
dbc | DBC | - | Datenbank, aus der exportiert werden soll 0 : Verwende die aktuelle Datenbankverbindung |
selectCmd | String oder char* | - | Vollständige select -Anweisung zur Ermittlung der Daten, die exportiert werden
sollen. Damit die Namen der XML-Elemente eindeutig werden, sollten Sie die
Ausgabespalten des Selects mit Namen versehen select c.name"colorname", ... Sonderzeichen, Punkte, Leerzeichen, ... in den Bezeichnern werden durch '_' ersetzt. |
xmlpath | String oder char* | "" | Einstiegspfad für den Export. Leerstring : Der aktuelle Pfad der XML-Daten wird verwendet, siehe xmlquery::app_path |
filename | String oder char* | "" | Name der XML-Datei und der Elemente, in denen die Daten abgelegt werden. Der Datename muss eine Endung (möglichst .xml) tragen. |
root | String oder char* | "root" | Name des Root-Elementes der XML-Datei Leerstring : Verwende den Namen der XML-Datei ohne Dateiendung |
parent | String oder char* | "" | Name des Elementes, in dem die Daten abgelegt werden Leerstring : Verwende den Namen der XML-Datei ohne Dateiendung und ohne den letzten Buchstaben (hoffentlich das s der englischen Mehrzahl.) |
lowerCase | int | 1 | Sollen die Namen der Datenbankattribute werden in Kleinbuchstaben dargestellt
werden? 1 : Kleinbuchstaben verwenden sonst : Großbuchstaben für die Attributnamen, Spaltennamen im select (in doppleten Anführungszeichen hinter dem Attribut) bleiben unverändert. |
attrXformat | String oder char* | "" | Zuordnungen zwischen Tabellenspalten und Dateieindungen, bestehend aus
kommagetrennten Paaren Attributname Dateiendung (ohne Punkt),
z.B. "Preview gif, Data indd". Leerstring : Alle Daten werden in Binärdateien (.bin) exportiert. |
Exportiere einige Felder der Tabelle panelstatements. Das Root-Element der XML-Datei heißt panelstatements. Die Daten werden jeweils in Elementen des Namens panelstatement geschrieben.
xml::export_ ( 0, "select id, description, statement from panelstatements where id > 0", "", // Pfad aus InDesign® "panelstatements.xml");
Exportiere einige Felder der Tabelle panelstatements. Das Root-Element der XML-Datei heißt ROOT. Die Daten werden jeweils in Elementen des Namens ENTRY geschrieben. Das Datenbankattribut panelstatements.description erzeugt XML-Elemente mit dem Namen Beschreibung
xml::export_ 0, "select id, description\"Beschreibung\", statement from panelstatements where id > 0", "", "panelstatements.xml", "ROOT", "ENTRY");
xml::export 0, "select id, description, statement from panelstatements where id > 0", "", // Pfad aus InDesign® "panelstatements.xml");
Um alle Werte einer Tabelle zu exportieren, kann auch der Stern * zur Beschreibung der Tabellenattribute verwendet werden.Beachten Sie, dass die Namen aller Attribute in Großbuchstaben erscheinen.
xml::export_ ( 0, "select * from panelstatements where id >0", "", "panelstatements.xml")
Exportiere alle Daten der Tabelle pageitems. Dabei werden wie Previews als gif-Bilder und die Daten als InDesign®-Dateien abgelegt.
xml::export_ ( 0, "select * from pageitems where id >0", "", // Pfad aus InDesign® "pageitems.xml", "", // root <pageitems> "", // parent <pageitem> 1, // lower case names "Data indd, Preview gif")));
Die folgenden Anweisungen exportieren die Daten der Tabelle pageitems in dem Format, in dem es vom Plugin Templates benötigt wird.
int main () { char cmd[2000];
*cmd = 0; strcat (cmd, "select"); strcat (cmd, " p.id,"); strcat (cmd, " p.name,"); strcat (cmd, " p.description,"); strcat (cmd, " p.data,"); strcat (cmd, " p.preview,"); strcat (cmd, " '<type>', t.id, t.name, '</type>',"); strcat (cmd, " '<state>', s.id, s.value, '</state>',"); strcat (cmd, " '<domain>', d.id, d.name, '</domain>',"); strcat (cmd, " p.leftpos,"); strcat (cmd, " p.toppos,"); strcat (cmd, " p.rightpos,"); strcat (cmd, " p.bottompos"); strcat (cmd, " from pageitems p, PageItemTypes t,"); strcat (cmd, " RelatedTo s, Domain d"); strcat (cmd, " where"); strcat (cmd, " p.id > 0"); strcat (cmd, " and t.ID = p.TypeID"); strcat (cmd, " and s.ID = p.StateID"); strcat (cmd, " and d.ID = p.DomainID");
showmessage ("Export der PageItems : %s", serror (xml::export_ ( 0, cmd, "", "pageitems.xml", "", "", 1, "Data indd, Preview gif"))); return 0; }
Das Beispiel schreibt die XML-Struktur aller Rahmen des Dokumentes ins Logfile.
int wlevel (char * m1, char * m2, int level) { int l = 0;
for (l = 0; l < level; l++) wlog ("", "\t"); if (m1) wlog ("", "%s", m1); if (m1 && m2) wlog ("", " "); if (m2) wlog ("", "'%s'", m2); wlog ("", "\n");
return 1; }
int visit_xml (ItemRef frame, XMLElement elem, int level) { int ix = 0; int iX; char name [512]; char content [20000]; int pos, len; char txt [512]; char descr [512]; XMLElement child = 0;
// Element name wlevel (xml::get_name (elem), 0, level);
// Content xml::strcpy_elem (elem, txt, 511, &pos, &len); if (len >= 0) { sprintf (descr, "[%d, %d]", pos, pos+len); wlevel (descr, 0, level+1); wlevel (txt, 0, level+1); }
// Attributes iX = xml::count_attributes_elem (elem); if (iX) wlevel ("Attributes", 0, level+1); for (ix = 0; ix < iX; ix++) { xml::sattribute_elem (elem, ix, name, content); wlevel (name, content, level+2); }
// Recursive call for all children iX = xml::count_children (elem); for (ix = 0; ix < iX; ix++) { if (xml::get_child (elem, ix, &child) == 0) { visit_xml (frame, child, level+1); xml::release (child); child = 0; } }
// Ready return 0; }
int main () { ItemList frames = itemlist::allframes (1, 0); ItemRef frame = item::alloc (); XMLElement elem = 0; int len = itemlist::length (frames); int i = 0;
while (i < len) { itemlist::get (frames, frame, i++); if (xml::get_element (frame, &elem) == 0) { visit_xml (frame, elem, 0); } }
xml::release (elem); item::release (frame); itemlist::release (frames); return 0; }
Alphabetic index HTML hierarchy of classes or Java