Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


例: エレメントまたは属性名のハイフンを下線に変換する

ハイフンを含んでいるデータ名を持つ項目のあるデータ構造から 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-5  pic 9(5).
1 pos         comp-5  pic 9(5).
1 tagstate    comp-5  pic 9  value zero.
1 quotestate  comp-5  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
      if xmldoc(pos:1) = '"'
        if quotestate = 0
          move 1 to quotestate
        else
          move 0 to quotestate
        end-if
      end-if
    end-if
    if tagstate = 1 and quotestate = 0 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>

ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)