BizTalk マッパーを使用して HL7 A31 メッセージにマッピングしています。マップには、いくつかのインライン XSLT スクリプト Functoid があります。
XML が HL7 送信パイプラインを通過すると、次のエラーが生成されます。
要素「ROL_11_OfficeHomeAddress」の構造が無効です
中断されたメッセージを見ると、なぜこれが起こったのかがわかります。ROL_11 要素は空で、次のようになります。
<ROL_11_OfficeHomeAddress>
</ROL_11_OfficeHomeAddress>
開始タグと終了タグの間には、インデントのために改行といくつかのスペース/タブがあります。これは XSLT によって生成されたものとまったく同じであり、エラーの原因は改行だと思います。
<xsl:if>
XML を記述する前に値をチェックするステートメントで XSLT をラップすることができます。ただし、この問題は多くの場所で発生しており、このようにすべての要素をラップするのはやり過ぎのようです。
私が本当に欲しいのは、BizTalk が次のように要素を空の要素に自動的に変換することです。
<ROL_11_OfficeHomeAddress />
これで問題は解決すると思います。そうするように伝える方法はありますか?
私がすでに試したこと:
but を使用
<xsl:strip-space>
すると、独自のエラーが発生しました。これは、BizTalk がインライン XSLT を独自のコードでラップしているため、strip-space が間違った場所に指定されたためだと思います。マップのグリッド プロパティを変更して、空白が削除されることを期待してIndentをNoに設定します。これは、中断されたメッセージに表示される XML には影響しませんでした。
このガイダンスに従って、従来の空白処理用のレジストリ キーを追加します。繰り返しますが、これはまったく効果がないように見えました。