1

BizTalk マップが入力 XML からデータを正しく抽出していない状況があります。

入力スキーマは次のようになります。

順序

  A 

  B

XSD 上のこれら 3 つのノードはすべて、最小 0、最大無制限です。

サンプルの入力ファイルのフラグメントは次のとおりです。

<A>1</A>
<B>hi</B>
<A>2</A>
<B>there</B>

これで、マップはこのデータを取得し、ストアド プロシージャを呼び出してデータをテーブルに挿入します。A of 1 と A of 2 の両方のフィールド B で「こんにちは」を取得しています。これは正しくありません。

問題を地図にたどりました。生成された XSLT は A に対して foreach を実行し、次に値 B を取得しますが、常に最初の B を取得します。

入力スキーマまたはマップを変更してこれを正しく機能させるためのヒントはありますか?

4

1 に答える 1

2

A 項目と B 項目を一緒にグループ化する必要がある場合は、スキーマを変更してラッパー要素を作成できます。スキーマは次のようになります。

<xs:element name="wrapper">
  <xs:complextype>
    <xs:sequence>
      <xsl:element name="A" type="xs:string" minoccur="1" maxoccur="1"/>
      <xsl:element name="B" type="xs:string" minoccur="1" maxoccur="1" />
    </xs:sequence>
  </xs:complextype>
</xs:element>

次に、ラッパー要素をループして、A 要素と B 要素を取得できます。しかし、それがあなたが探しているものかどうかはわかりません。

もう 1 つのオプションは、XSLT Call-templates 内で作業することです。A と A の現在の反復を使用すると、B を取得すると、実際には B[i] になります。ここで、i は現在の反復です。

于 2010-01-26T19:31:39.560 に答える