出力形式の自由化機能を利用して、XML形式の入力データを別のXML用の表現形式に変換する場合、xml_convert関数を使います。しかし、CDATAセクションを含むXML形式の入力データに対して、xml_convert関数を使って別のXML用の表現形式に変換すると、CDATAセクション内の文字列も変換対象となってしまいます。イメージを以下に示します。
CDATAセクションで書かれたXML形式の入力データを変換対象とせず、そのままのデータ値で出力する場合は、以下の関数を指定します。
入力ジャーナルファイル
\data配下に以下の2ファイルがあるとします。
indata1.xml
<doc>
<basic date="2011年10月30日" >
</basic>
<detail>
<destination area="東京都千代田区" >東京営業所</destination>
<purpose>Data Effector販売推進会議</purpose>
</detail>
<report><![CDATA[検索レスポンス<10秒以内>を要求]]></report>
</doc> |
indata2.xml
<doc>
<basic date="2011年11月02日">
</basic>
<detail>
<destination area="神奈川県横浜市港北区">本社</destination>
<purpose>Interstage定例会議</purpose>
</detail>
<report><![CDATA[事前検証は統括部&営業部の承認が必要]]></report>
</doc> |
連結条件
入力項目定義 (ListDef) | {document(Journal) {$date /doc/basic/@date, $yoken /doc/detail/purpose/text(), $rep1 asis_text(/doc/report/text()), |
リターン式 (OutputDef) | {"DATA{<doc> <No>%1%</No> <日付>%2%</日付> <要件>%3%</要件> <レポート1>%4%</レポート1> <レポート2>%5%</レポート2> </doc>\n}" row_number(),$date,$yoken,$rep1,xml_convert($rep2) } |
ListDefパラメタで、$rep1にはasis_text関数を指定し、$rep2では何も指定しません。
OutputDefパラメタで、$rep2にxml_convert関数を指定します。
動作環境ファイル
replace用動作環境ファイル | # 入力ファイル JnlFile Journal "..\data\" # 出力ファイル OutFile "..\result\out_result1.xml" # ログファイル LogFile "..\log\Replace.log" # ジョイン警告:正常終了 JoinAlert 0 |
連結結果(out_result1.xml)
<doc> <No>1</No> <日付>2011年10月30日</日付> <要件>Data Effector販売推進会議</要件> <レポート1><![CDATA[検索レスポンス<10秒以内>を要求]]></レポート1> ・・・(注1) <レポート2>検索レスポンス<10秒以内>を要求</レポート2> ・・・(注2) </doc> <doc> <No>2</No> <日付>2011年11月02日</日付> <要件>Interstage定例会議</要件> <レポート1><![CDATA[事前検証は統括部&営業部の承認が必要]]></レポート1>・・・(注1) <レポート2>事前検証は統括部&営業部の承認が必要</レポート2> ・・・(注2) </doc> |
注1)レポート1は、変換されずそのまま出力されます。
注2)レポート2は、CDATAセクションが削除され、実体参照文字列に変換されます。
参照
asis_text関数の詳細については、“リファレンス集”の“連結条件ファイル”を参照してください。
xml_convert関数の詳細については、“リファレンス集”の“単一行関数(変換関数)”を参照してください。
実体参照については“2.4.1 実体参照の扱い”を参照してください。