1

「ノード」として設定された「ルート XML 要素」(以下のように) と「XML 結合」ステップを使用していくつかのフィールドを追加する「XML の追加」ステップを使用した変換で、xml コードを Pentaho PDI と結合しようとしています。

同じデータを持ついくつかのフィールドをすべての「ノード」に挿入したいと考えています。

<Rootnode>
 <Node>
 <Node>
 <Node>
</Rootnode>

問題は、どの XPath 式を試しても、挿入したいフィールドが最初のノードにしか挿入されないことです。「RootNode/Node」や「//Node」などの式が機能しません。

これは私が得る結果です:

<RootNode>
   <Node>
    <inserted field>
  <Node>
  <Node>
</RootNode>

これは私が取得したいものです:

<RootNode>
  <Node>
    <inserted field>
  <Node>
    <inserted field>
  <Node>
    <inserted field>
</RootNode>

質問: XML 結合ステップは、明示的に指定された 1 つのノードにのみコードを結合できますか? または、選択したすべてのノードにコードを挿入するために XML 結合ステップの XPath ステートメント入力で使用できる XPath 式はありますか?

(比較するものが何もないので、比較フィールドとの複雑な結合は適切ではないと思います。)

4

1 に答える 1

0

はい、繰り返しの方法で XML ノードを読み取ることができます。これを確認してください:XMLノード値を抽出し、pentahoで繰り返しノードから抽出する方法は? それを行うためのソリューション。Fields セクションで XPATH を適切に定義する必要があります。ここでは「.」(ドット)の使い方が重要です。

あなたの質問については、上記と同じロジックを適用する必要がありますが、わずかな変更があります。以下の画像を確認してください。

ここに画像の説明を入力

私がここでやったことは次のとおりです。

  1. まず、Rootnode後で結合するために使用する構造を取得します(画像の ktr の最初の行)。

  2. 第二にNode、上記のリンクで説明されているように、すべてを繰り返し読んでいます。以下の画像を確認してください。

ここに画像の説明を入力

  1. 定数フィールドを追加します。これが新しいフィールド ノードです。newFieldノード名として使用しました。

「XML の追加」部​​分で、この新しいフィールドをNodeセクションに追加します。

  1. XML Join : このステップでは、結合条件を として指定し//Rootnodeます。Rootnodeこれは、「ポイント 1」からの流入と結合します。

ここに画像の説明を入力

  1. 最後に XML 出力(target.xml)を生成します。

    ここに画像の説明を入力

上記で説明したように、.ktrの要点を配置しました。ご覧ください。

注: source.xml ファイルは質問と同じです。


複雑な XML 構造の処理:

以下のコメントで強調されているように、複雑な xml 構造を処理する場合、上記のアプローチは失敗します。したがって、これを実現するには、StAX パーサーを使用して複雑な XML 構造を簡単に読み取る「XML 入力ストリーム (StAX)」ステップを使用する必要があります。

私はこのブログで同じことを要点と一緒に文書化しました。これをチェックしてください!! これはあなたのデータセットでも機能すると思います。

それが役に立てば幸い :)

于 2015-03-01T15:38:18.503 に答える