名前空間の追加サンプルのしくみ
1 つ目、2 番目、および 4 番目のテストでは、NamespaceSampleReceivePipeline パイプラインにある名前空間の 追加 コンポーネントを使用します。 次のように、ルート ノードに名前空間のないドキュメントを入力として受け取ります。
<CanonicalOrder OrderID="OrderID_0" OrderDate="OrderDate_1" Status="Status_2">
次の表は、 名前空間の追加 コンポーネントに設定されたプロパティ値を示しています。
プロパティ | Type | 値 |
---|---|---|
ExtractionNodeXPath | 静的 | (空) |
NamespaceBase | 静的 | http://schemas.microsoft.biztalk.esb.test.com/test |
NamespacePrefix | 静的 | esbTest |
区切り記号 | 静的 | / |
Xpath | 動的 | /CanonicalOrder/@OrderID|/CanonicalOrder/@OrderDate |
テーブルに表示されるプロパティ設定により、コンポーネントは 2 つの XPath クエリ /CanonicalOrder/@OrderID と /CanonicalOrder/@OrderDate ( XPaths プロパティに指定された 2 つのクエリを "パイプ" 文字で区切って) 実行して XML ドキュメントを検索します。 これらのクエリは、ドキュメントのルート ノードの OrderID 属性と OrderDate 属性の値を返します。この例では、2 つの値は "OrderID_0" と "OrderDate_1" です。
次に、コンポーネントはこれらの値と他のプロパティの値を使用して、新しいルート名前空間を構築します。 NamespaceBase、NamespacePrefix、Separator、および 2 つの XPath クエリの値を次の形式で組み合わせます。
xmlns:{NamespacePrefix}="{NamespaceBase}{Separator}{XPaths[1]}{Seperator}
{XPaths[2]}{Separator}...{XPaths[n]}"
これにより、次に示すように、新しい名前空間が生成されます。
xmlns:esbTest="http://schemas.microsoft.biztalk.esb.test.com/test
/OrderID_0/OrderDate_1"
したがって、 NamespaceSampleReceivePipeline パイプラインによる処理後の更新されたドキュメントは次のとおりです。
<esbTest:CanonicalOrder xmlns:esbTest=
"http://schemas.microsoft.biztalk.esb.test.com/test/OrderID_0
/OrderDate_1" OrderID="OrderID_0" OrderDate="OrderDate_1"
Status="Status_2">
ExtractionNodeXPath プロパティの使用
既定では、 名前空間の追加 コンポーネントは、名前空間とプレフィックス情報を追加するときに、メッセージ内の XML ドキュメントのルート要素を使用します。 XML ドキュメントのサブセットのみをメッセージ本文として使用する場合 (特定のエンベロープ シナリオで役立つ場合、または受信ドキュメントの一部にのみ関連性がある場合)、 ExtractionNodeXPath プロパティを設定して 、名前空間の追加 コンポーネントが指定した要素を検索して結果のメッセージとして使用するように強制できます。 たとえば、受信した CanonicalOrder メッセージに含まれるこのメッセージのコンシューマーに関連する OrderDetails 要素が 1 つだけであることがわかっている場合は、 ExtractionNodeXPath プロパティを設定して OrderDetails 要素へのパスを指定できます。 このプロセスの例については、前述のパススルーへのパススルー抽出の追加に関するテストを参照してください。
Note
ExtractionNodeXPath プロパティは、1 つの要素のみを返す XPath である必要があります。 結果が要素ではない場合、または XPath クエリが複数の要素を返す場合、コンポーネントは例外を発生させます。