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:
  1. Hat das Skript ein eigenes XML-Element, wird dieses verwendet. Dieses Kriterium erfüllen nur Skripte, die über XML Link ausgelöst wurden.
  2. Ist ein Textmodell definiert (textmodel::available) und mit einem XML-Element verknüpft, wird dieses Element verwendet.
  3. Ist ein Rahmen definiert (gFrame != 0) und mit einem XML-Element verknüpft, wird dieses Element verwendet.
  4. Verwende das Root-Element des Dokumentes

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

Version 4.0 R5804, 23. Sep 2014

Verfügbarkeit:
Comet-Plug-Ins, comet_pdf, Illustrator

comet.CDocument.setAttribute

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

Version 4.0 R5804, 23. Sep 2014

Verfügbarkeit:
Comet-Plug-Ins, comet_pdf, Illustrator

comet.CDocument.getAttribute

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

v4.0.5 R9020, 30. Sep. 2015

Verfügbarkeit:
Comet-Plug-Ins, comet_pdf

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



priint:comet InDesign® Plug-Ins

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); }


priint:comet InDesign® Plug-Ins, comet_pdf

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.
#include "internal/text.h"

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; }

Version 2.1 R 1155, 22.2.2009

priint:comet InDesign® Plug-Ins

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

v4.0.5 R10330, 15. Apr 2015

Verfügbarkeit:
Comet-Plug-Ins, comet_pdf

path_elem

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; }

v4.0.5 R20300, 5. Okt. 2017

Verfügbarkeit:
Comet-Plug-Ins, comet_pdf

path

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

v4.0.5 R10330, 15. Apr 2015

Verfügbarkeit:
Comet-Plug-Ins, comet_pdf

add_attribute_elem

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; }

v4.0.5 R20300, 6. Okt. 2017

Verfügbarkeit:
Comet-Plug-Ins, comet_pdf

add_attribute

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);


priint:comet InDesign® Plug-Ins

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);


priint:comet InDesign® Plug-Ins, comet_pdf

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins

get_element

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

Version 1.3.1 (24. Januar 2006)

priint:comet InDesign® Plug-Ins

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

Version 1.3.1 (24. Januar 2006)

priint:comet InDesign® Plug-Ins, comet_pdf

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

get_element

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; }

v4.0.5 R20300, 6. Okt. 2017

priint:comet InDesign® Plug-Ins, comet_pdf

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);

Indexbasierte Elementauswahl seit Version 1.3.1 (24. Januar 2006)

priint:comet InDesign® Plug-Ins

xml::getint
count_attributes

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));

Indexbasierte Elementauswahl seit Version 1.3.1 (24. Januar 2006)

priint:comet InDesign® Plug-Ins, comet_pdf

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

get_element
iattribute_frame

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);

Indexbasierte Elementauswahl seit Version 1.3.1 (24. Januar 2006)

priint:comet InDesign® Plug-Ins

xml::strcpy

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));

Indexbasierte Elementauswahl seit Version 1.3.1 (24. Januar 2006)

priint:comet InDesign® Plug-Ins, comet_pdf

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

get_element
sattribute_frame

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);

Indexbasierte Elementauswahl seit Version 1.3.1 (24. Januar 2006)

priint:comet InDesign® Plug-Ins

xml::getfloat

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));

Indexbasierte Elementauswahl seit Version 1.3.1 (24. Januar 2006) Indexbasierte Elementauswahl seit Version 1.3.1 (24. Januar 2006)

priint:comet InDesign® Plug-Ins, comet_pdf

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

get_element
fattribute_frame

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);

outStartPos und outLen seit Version 2.1, R 1014, 30. Oktober 2008 (Tag des ersten Schnees 2008)

priint:comet InDesign® Plug-Ins

getfloat
strcpy
getint_frame

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.

outStartPos und outLen seit Version 2.1, R 1014, 30. Oktober 2008 (Tag des ersten Schnees 2008)

priint:comet InDesign® Plug-Ins

getint

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins

get_element
getint_frame

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);

outStartPos und outLen seit Version 2.1, R 1014, 30. Oktober 2008 (Tag des ersten Schnees 2008)

priint:comet InDesign® Plug-Ins

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.

outStartPos und outLen seit Version 2.1, R 1014, 30. Oktober 2008 (Tag des ersten Schnees 2008)

priint:comet InDesign® Plug-Ins

getint

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins

get_element
gefloat_frame

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 .
#include "internal/text.h"
char	s[256];
xml::strcpy (xml_path, s, 255);

outStartPos und outLen seit Version 2.1, R 1014, 30. Oktober 2008 (Tag des ersten Schnees 2008)
fmt seit Version 2.1, R 1070, 15. Dezember 2008 (immer noch Schnee)

priint:comet InDesign® Plug-Ins

getint
strcpy_frame
getfloat_frame

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 .
#include "internal/text.h"

outStartPos und outLen seit Version 2.1, R 1014, 30. Oktober 2008 (Tag des ersten Schnees 2008)
fmt seit Version 2.1, R 1070, 16. Dezember 2008 (immer noch Schnee)

priint:comet InDesign® Plug-Ins

strcpy

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins

get_element
strcpy_frame

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

xml::release
count_children
get_child
get_parent

static int (
  ItemRef frameRef,
  XMLElement* xmlElement = 0,
  char* path = 0)

Bitte verwenden statt dessen die gleichwertige Funktion xml::get_element.

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; }

v4.0.5 R20300, 6. Okt. 2017

priint:comet InDesign® Plug-Ins, comet_pdf

xml::release
count_children
get_child
get_parent

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; }

Version 4.0.5 R20300, 5. Okt 2017

priint:comet InDesign® Plug-Ins, comet_pdf

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; }

Version 4.0.5 R20300, 5. Okt 2017

priint:comet InDesign® Plug-Ins, comet_pdf

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

get_element

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

get_element
count_children

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

get_element

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

Version 2.1, R1014, 31. Okt. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

get_element

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

Version 2.1, R1014, 31. Oct. 2008

priint:comet InDesign® Plug-Ins, comet_pdf

get_element

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

Version 2.1, R1014, 31. Okt. 2008
startPos, len, isTable und isInline seit Version 2.1, R1166, 26. Feb. 2009

priint:comet InDesign® Plug-Ins

get_element

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

Version 1.1.7, Januar 2005

priint:comet InDesign® Plug-Ins

export_action
xmlquery::app_path
system::crypt
system::app_path
system::plugin_path

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.

Version 1.1.7, Januar 2005

priint:comet InDesign® Plug-Ins

export_placeholder
system::crypt

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");

Version 1.1.7, Januar 2005

priint:comet InDesign® Plug-Ins

export_action
export_placeholder
system::crypt

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

<preview src='pageitems/preview/12.gif'></preview>.

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 :
select id, to_char (1401)"id2", ....

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
pdf PDF  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; }

Version 1.1.7, Januar 2005

priint:comet InDesign® Plug-Ins

export_action
export_placeholder

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