XMLCHAR 関数

目的

構造体のデータを XML としてバッファーにダンプします。その後、PL/I SAX パーサーを使用するコードなど、他のアプリケーションにこの XML を渡すことができます。

構文

XMLCHAR(x, p, n)

パラメーター

x は、構造体参照です。

構造体参照 x には、文字列および数値データのみを指定する必要があります。

構造体参照 x はサブ構造体を含むことができます。ただし、内包されたサブ構造体では、名前の代わりにアスタリスク (*) を使用することはできません。アスタリスクはベース要素名として使用できますが、名前のない要素はターゲット バッファーに書き込まれません。

p は、ターゲット バッファーのアドレスです。

n は、ターゲット バッファーの長さです。

バッファーの長さは計算型でなければならず、FIXED BINARY(31,0) に変換されます。

バッファーの長さは負でない長さである必要があります。

説明

XMLCHAR 関数は、バッファーに書き込まれたバイト数を返します。バッファーが小さすぎる場合は、構造体データが切り捨てられ、構造体をバッファーに格納するために必要なバイト数が返されます。

指定された構造体のデータが XML としてバッファーにダンプされる際、次の処理が行われます。

  • 構造体に含まれる各名前が書き込まれます。構造体は、最初に「<」と「>」で囲まれ、後で「</」と「>」で囲まれます。
  • 数値およびビット データが文字に変換されます。
  • 可能な場合、先頭と末尾の空白が削除されます。

このコード サンプルを次に示します。

XMLCHAR: PROC() OPTIONS(MAIN);

DCL 1 REDSOX,
     5 WINS(5) FIXED BIN(31) INIT(1,2,3,4,5),
     5 PITCHERS(5) CHAR(15) VARYING
       INIT('Clay Buchholtz',
            'Jon Lester',
            'John Lackey',
            'Ryan Dempster',
            'Koji Uehara');

DCL BUFFER CHAR(4000);
DCL LEN    FIXED BIN(31);

LEN = XMLCHAR(REDSOX, ADDRDATA(BUFFER), STG(BUFFER));
PUT SKIP LIST(SUBSTR(BUFFER, 1, LEN));

END;

この場合、次の内容がバッファーに書き込まれます。

<REDSOX><WINS>1</WINS><WINS>2</WINS><WINS>3</WINS><WINS>4</WINS><WINS>5</WINS><PITCHERS>Clay Buchholtz</PITCHERS><PITCHERS>Jon Lester</PITCHERS><PITCHERS>John Lackey</PITCHERS><PITCHERS>Ryan Dempster</PITCHERS><PITCHERS>Koji Uehara</PITCHERS></REDSOX>

注: 生成された XML では、デフォルトの変数名はすべて大文字になります。名前が宣言された際の大文字と小文字を維持するように指定するには、XML コンパイラ オプションの CASE(ASIS) サブオプションを使用してください。

制約事項

なし。