Hallo! Mein Name ist Klaus Mödinger und ich bin Kommanditist der comSID GmbH & Co. KG.
In diesem Artikel stelle ich eine kleine RPG-Prozedur vor, die das Erstellen von XML-Dateien mit RPG erleichtern kann.
In XML haben einige Zeichen, z.B. das <-Zeichen besondere Bedeutungen. Im "Fließtext" müssen sie durch die entsprechenden "Entities" ersetzt werden, wenn ein XML-Parser keinen Schluckauf bekommen soll.
Hier eine kleine RPG-Routine, die das erledigt:
D xmlSpecial PR 1536A Varying
D pString 256A Value Varying
P xmlSpecial B
D xmlSpecial PI 1536A Varying
* Worst case: Input string (256A) contains
* only apostrophes or double quotes
* Output string needs to be 6*256=1536
D pString 256A VALUE Varying
D
D str S 1536A Varying
D len S 10I 0
D i S 10I 0
D c S 1A
/FREE
len = %LEN(%TRIM(pString));
FOR i = 1 TO len;
c = %SUBST(pString: i: 1);
SELECT;
WHEN c = '&';
str = str + '&';
WHEN c = '>';
str = str + '>';
WHEN c = '<';
str = str + '<';
WHEN c = '"';
str = str + '"';
WHEN c = '''';
str = str + ''';
OTHER;
str = str + c;
ENDSL;
/END-FREE
P E
Aufgerufen wird sie z.B. so:
xml = '<staffer>'; xml = xml + %TRIM(xmlSpecial(pStaffer)); xml = xml + '</staffer>' + KEoL; xml = xml + KEoL;
Alternativen
Unter Umständen ist es einfacher, Texte mit einem CDATA-Block zu umhüllen.
Grundsätzlich ist es mühsam, sich selbst um die Tags und die spitzen Klammern zu kümmern.
Andere Sprachen bieten die Möglichkeit, aus XML-Schemata einen Objektbaum zu erstellen. Die XML-Struktur wird dann durch Setters zusammengebaut und die Serialisierung in eine XML-Datei ist dann ein einzigerAufruf. Vorteil: Tag- und Attributnamen stimmen immer und man muss sich nicht um das ganze "Drumherum" kümmern.
Beispiele in Java dafür wären XmlBeans und JAXB.

Kommentar schreiben