0

XML を入力メッセージとして HL7 メッセージを生成する必要があります。私はここでいくつかの異なるシナリオに直面しています。

問題: 入力 XML メッセージの一部のフィールドで「Enter」(\r\n) 文字を受け取った場合。最終的な HL7 ファイルは、そのフィールドが HL7 メッセージで使用されるポイントで中断されます。これにより HL7 メッセージが無効になり、このため宛先システムはそのメッセージを拒否します。

私は次のアプローチを試しました:

1. マップ • orch で受信した XML メッセージは、同じスキーマを使用して別の XML メッセージに変換されます。マップでさまざまな方法をたどってみました。o スクリプト Functoid は、入力フィールドが \r\n 値で構成されている場合に空の値を割り当てるために使用されます。または o XSLT を使用して、入力フィールドの値をチェックすることにより、入力 XML メッセージを出力に変換します。または o 単純な 1 対 1 マッピングを使用して、入力 XML メッセージを出力 XML メッセージに変換します。

出力 • 上記の 3 つのアプローチでは、出力 XML メッセージは NULL のみです。

2. クラス ライブラリ • orch で受信した XML メッセージは、C# 関数への入力として渡されます。• 次のコードを見つけてください。

出力 o その関数からの出力 XML には、改行がありません (\r\n)。しかし、最終的な HL7 メッセージはそのフィールドでのみ中断されます。

public static XmlDocument RemoveNewLineCharacters(XLANGMessage msg) { XmlDocument xmlDoc =(XmlDocument)msg[0].RetrieveAs(typeof(XmlDocument));

        XmlDocument XmlIndentedMessage = new XmlDocument();

        string IndentedMessage = string.Empty;
        StringBuilder StrBldr = new StringBuilder();

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Encoding = Encoding.UTF8;
        settings.Indent = true;

        xmlDoc.PreserveWhitespace = false;

        XmlWriter writer;

        writer = XmlWriter.Create(StrBldr, settings);

        xmlDoc.Save(writer);

        IndentedMessage = StrBldr.ToString();

        XmlIndentedMessage.LoadXml(IndentedMessage);

        writer.Close();

        return XmlIndentedMessage;
    }

この問題を解決するための助けは本当に感謝しています。

ありがとう

4

1 に答える 1

0

あなたの質問には少し混乱していますが、私の理解が正しければ、XML 要素に含まれている可能性のある改行シーケンスを削除する必要があります。メッセージ タイプが識別され、オーケストレーションのメッセージ コンテキストでタグ付けされる前に、パイプライン コンポーネントでプリプロセッサ (エンコード/デコード) を構築しようとします。パイプラインでは、オーケストレーションよりも低レベルでメッセージを制御できます。このタイプの XML 操作をオーケストレーションで行うことはできればお勧めしませんが、オーケストレーションで行う必要がある場合は、ここで概説されているように XSLT で行います。それが役立つことを願っています。

于 2012-04-23T12:29:22.150 に答える