0

BizTalk マップに問題があり、ソース スキーマから宛先スキーマにデータをコピーする必要がありますが、条件があります。

1 つの値を除いて、同じ名前の 3 つのノードの値をコピーしたいと考えています。もっとよく説明しましょう。

例を考えると:

<testxml>
    <node>abc</node>
    <node>def</node>
    <node>ghi</node>
    <node>jkl</node>
</testxml>

文字列連結を使用して、宛先スキーマのデータを次のように取得することができました。

<testxml>
    <node>abcdefghijkl</node>
</testxml>

ただし、出力は次のようになります。

<testxml>
    <node>abcdefjkl</node>
</testxml>

したがって、出力から値「ghi」を抽出しています。

これを達成する方法はありますか?

注:抽出する必要があるテキストが文字列の途中にあるため、文字列抽出を使用できません

4

3 に答える 3

2

これが「最もクリーンな」ソリューションです (注意してくださいスクリプト Functoid は、大きなファイルなどの状況でメモリ リークを引き起こすため危険です。極端な場合にのみ使用する必要があります。詳細については、https: //support.microsoft.com/en を参照してください。 -us/kb/918643 )、あなたの問題のために、等しくない演算子を組み合わせることでこれを行うことができます (基本的に、要素が JKL などと等しくないことを伝えます)。次に、累積連結 Functoid を追加すると、あなたの出力では、すべきではないものを除いてすべての文字列が連結されています

ここに画像の説明を入力

添付ファイルに、私が作成した小さなサンプルを見つけることができます Sample Demo

于 2015-08-06T13:23:58.617 に答える
1

これは、スクリプト Functoid といくつかのカスタム インライン XSLTを使用して簡単に実現できます。

BizTalk マッパー スクリプト Functoid

<xsl:variable name="outputval" select="concat(//node[1],//node[2],//node[4])" />

<xsl:element name="node">
<xsl:value-of select="$outputval" />
</xsl:element>
于 2015-08-06T12:25:03.153 に答える
0

これを解決するために私が行ったことは、カスタム正規表現 C# スクリプトを使用することです。

public String Trim(String Input) {
    String Output = Regex.Replace(Input, "ghi","");
return Output;
}

ここに画像の説明を入力

これにより、不要な文字列値を削除するという問題が解決しました。Jeroen Maes が指摘したように、カスタム Functoid スクリプトを使用してインライン XSLT を介してこれを行うこともできます。

どちらのソリューションでも、次の出力が得られます。

<testxml>
    <node>abcdefjkl</node>
</testxml>
于 2015-08-06T13:10:45.897 に答える