Zum Hauptinhalt springen

Befehle für XML-Verarbeitung

Befehle für XML-Verarbeitung Liste der Befehle und Konstanten zur Verarbeitung von XML

Sobald Informationen aus einer Applikation in einer externen Datei gespeichert werden sollen, stellt sich die Frage nach dem Format der externen Datei. Grundsätzlich kann zwischen zwei Alternativen gewählt werden. Die Informationen können in einem binären Format oder in einem Textformat abgelegt werden. Beide Formen bieten Vor- und Nachteile. Die Speicherung im Textformat ist häufig wesentlich größer als ein binäres Format, kann aber leichter durch den Programmierer überprüft werden.

Zur Speicherung von strukturierten Daten in einem Textformat stellt XML (Extensible Markup Language) eine Reihe von Regeln zur Verfügung, mit deren Hilfe das Format einer Datei definiert werden kann. Es gibt somit nicht das XML-Format, sondern vielmehr eine ganze Reihe von Formaten, die mit Hilfe von XML erzeugt wurden. Mit XML wird dabei festgelegt, wie bestimmte Daten gespeichert werden. Die Interpretation der Daten erfolgt durch die Applikation. Eine Beschreibung der Regeln befinden sich auf der Web-Präsenz des W3-Konsortiums: www.w3.org .

Alle XML-verarbeitenden Programme müssen die Zeichenkodierung UTF-8 und UTF-16 unterstützen. Sollen die Daten mit anderen Applikationen ausgetauscht werden, muss eine dieser Zeichenkodierungen verwendet werden. Es können aber auch andere Kodierungen angegeben werden.

Ein XML-Dokument ist immer hierarchisch aufgebaut. Der Dokument-Knoten bildet dabei das Wurzel-Element. Alle weiteren Elemente sind baumartig dem Wurzel-Element untergeordnet. Jedes Element besteht aus einer Start- und einer Ende-Zeichenkette. Die Eltern-Kind-Beziehung wird dadurch gekennzeichnet, dass sich das Kind-Element vollständig zwischen den Start- und Ende-Zeichenketten des Eltern-Elements befindet.

In CONZEPT 16 wird diese hierarchische Struktur mit Hilfe von CteNode -Objekten abgebildet. Um eine XML-Datei zu erzeugen, wird die hierarchische Struktur mit Cte-Objekten erzeugt und anschließend mit der Anweisung XmlSave () in eine externe Datei geschrieben. Umgekehrt wird beim Lesen einer XML-Datei mit XmlLoad () die Struktur in Cte-Objekte überführt und kann mit CteRead () durchsucht werden.

Die Informationen innerhalb der Datei werden in den Knoten-Objekten abgelegt. Der Typ des Knotens kann über die Eigenschaft ID ermittelt bzw. festgelegt werden:

  • _XmlNodeDocument ( 7 ) - Dokument Alle Knoten des Dokuments sind diesem Knoten untergeordnet. Der Wurzelknoten enthält ein Attribut zur verwendeten XML-Version. Das Attribut zum verwendeten Zeichensatz wird bei der Anweisung XmlSave () angegeben. Zusätzlich kann das Attribut "standalone" auf "yes" oder "no" gesetzt werden: tNodeDoc-> CteInsertNode ( 'standalone' , _XmlNodeAttribute , 'yes' , _CteAttrib )
  • _XmlNodeElement ( 8 ) - Element Der Name des Elements befindet sich in der Eigenschaft Name, als Wert wird NULL angegeben.
  • _XmlNodeAttribute ( 9 ) - Attribut Der Name des Attributs befindet sich in der Eigenschaft Name, der Wert in der Eigenschaft ValueAlpha.
  • _XmlNodeComment ( 10 ) - Kommentar Der Kommentar befindet sich in der Eigenschaft ValueAlpha. Angaben in der Eigenschaft Name werden ignoriert.
  • _XmlNodeText ( 11 ) - Text Der Text befindet sich in der Eigenschaft ValueAlpha. Angaben in der Eigenschaft Name werden ignoriert.
  • _XmlNodeCDATA ( 12 ) - Daten Die Daten befindet sich in der Eigenschaft ValueAlpha. Angaben in der Eigenschaft Name werden ignoriert.
  • _XmlNodeProcessingInstruction ( 13 ) - Verarbeitungsanweisung Das Ziel der Anweisung befindet sich in der Eigenschaft Name, die Daten in der Eigenschaft ValueAlpha.
  • _XmlNodeDocumentType ( 14 ) - Dokumenttyp Der Name des Wurzelelements befindet sich in der Eigenschaft Name, die Definition in der Eigenschaft ValueAlpha.

Beispiel zum Erstellen einer XML-Datei

main

local
{
tDoc : handle;
tRoot : handle;
tParent : handle;
}

{
// Create document node
tDoc # CteOpen(_CteNode);

tDoc->spID # _XmlNodeDocument;

// insert processing instrucion
tDoc->CteInsertNode('xml-stylesheet', _XmlNodeProcessingInstruction, 'type="text/xsl" href="style.xsl"');

// insert comment
tDoc->CteInsertNode('', _XmlNodeComment, 'List of cities');

// insert root
tRoot # tDoc->CteInsertNode('Cities', _XmlNodeElement, NULL);

// insert element
tParent # tRoot->CteInsertNode('City', _XmlNodeElement, NULL);

// attributes to element
tParent->CteInsertNode('state', _XmlNodeAttribute, 'Hessen', _CteAttrib);
tParent->CteInsertNode('name', _XmlNodeAttribute, 'Frankfurt', _CteAttrib);
tParent->CteInsertNode('population', _XmlNodeAttribute, '650000', _CteAttrib);

// insert element
tParent # tRoot->CteInsertNode('City', _XmlNodeElement, NULL);

// attributes to element
tParent->CteInsertNode('state', _XmlNodeAttribute, 'Hessen', _CteAttrib);
tParent->CteInsertNode('name', _XmlNodeAttribute, 'Darmstadt', _CteAttrib);
tParent->CteInsertNode('population', _XmlNodeAttribute, '140000', _CteAttrib);

tDoc->XmlSave(_Sys->spPathTemp + '\citylist.txt', _XmlSaveDefault, 0, _CharsetUTF8);

tDoc->CteClear(true);
tDoc->CteClose();
}

Das Beispiel schreibt folgende Datei:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<!--List of cities-->
<Cities>
<City state="Hessen" name="Frankfurt" population="650000"/>
<City state="Hessen" name="Darmstadt" population="140000"/>
</Cities>

Wird eine XML-Datei aufbereitet, darf in den Value...-Eigenschaften nur Zeichenketten übergeben werden. Andere Werte sind nicht zulässig. Die Zeichenketten dürfen keine Zeichen enthalten, die als Start- oder Ende-Zeichen (zum Beispiel < oder >) verwendet werden. Solche Zeichen müssen mit ihren Zeichencode oder als Zeichenreferenzen (&lt; oder &gt;) angegeben werden. Enthalten Zeichenketten das Start- und Ende-Zeichen, können sie in CDATA-Bereichen (Knotentyp _XmlNodeCDATA) abgelegt werden. Zeichenketten in diesen Bereichen dürfen das Ende-Zeichen des CDATA-Bereichs (]]>) nicht beinhalten.

Befehle

Konstanten