ハイフンを含んでいるデータ名を持つ項目のあるデータ構造から 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>