例: エレメント名に含まれるハイフンを下線に変換する

ハイフンを含むデータ名を持つ項目を含むデータ構造から XML 文書を生成すると、生成された XML には、ハイフンを含むエレメント名が含まれます。次の例は、要素の値に含まれるハイフンを変更せずに、エレメント名に含まれるハイフンを下線に変換する方法を示しています。

以下のデータ構造を考えます。

1 Customer-Record.
 2 Customer-Number pic 9(9).
 2 First-Name      pic x(10).
 2 Last-Name       pic x(20).

このデータ構造にいくつかのサンプル値を取り込んで、そのデータ構造から XML を直接生成し、プログラム Pretty (例: XML の生成で示しています) を使用してフォーマットすると、その結果は以下のようになります。

<Customer-Record>
  <Customer-Number>12345</Customer-Number>
  <First-Name>John</First-Name>
  <Last-Name>Smith-Jones</Last-Name>
</Customer-Record>

エレメント名にハイフンが含まれており、要素 Last-Name の内容にもハイフンが含まれています。

この XML 文書がデータ項目 xmldoc の内容であり、charcnt がこの XML 文書の長さに設定されていると仮定すると、エレメント名内のすべてのハイフンを下線に変更できますが、以下のコードを使用すると、要素の値は変更せずにそのままにしておくことができます。

1 xmldoc          pic x(16384). 
1 charcnt  comp pic 9(5).
1 pos      comp pic 9(5).
1 tagstate comp pic 9  value zero.
. . .
dash-to-underscore.
  perform varying pos from 1 by 1
          until pos > charcnt 
    if xmldoc(pos:1) = '<'
      move 1 to tagstate
    end-if 
    if tagstate = 1 and xmldoc(pos:1) = '-'
      move '_' to xmldoc(pos:1)
    else
      if xmldoc(pos:1) = '>'
        move 0 to tagstate
      end-if
    end-if 
  end-perform.

データ項目 xmldoc 内の修正された XML 文書には、以下に示しているように、エレメント名にはハイフンの代わりに下線が含まれます。

<Customer_Record>
  <Customer_Number>12345</Customer_Number>
  <First_Name>John</First_Name>
  <Last_Name>Smith-Jones</Last_Name>
</Customer_Record>