2017-02-01 4 views
0

入力XMLを細断してデータベースにロードする必要があります。 すべての要素にそれぞれのテーブルがあります。XMLの要素をループしてシュレッドしてデータベースにロードする方法

<root> 
    <creditreport> 
    <data1> 
     <A>val1</A> 
     <B>val2</B> 
    </data1> 
    <data2> 
     <C>val3</C> 
     <D>val4</D> 
    </data2> 
    <data3> 
    <E>val5</E> 
    <F>val6</F> 
    </data3> 
    <data3> 
    <G>val7</G> 
    <H>val8</H> 
    </data3> 
    </creditreport> 
</root> 

今すぐケトルで、私はXMLを取得し、データベースにそれを細断処理でしょう汎用フレームワークを設計しています: 着信XMLは次のようになります。 私はXMLを読むために 'Get XML Data'コンポーネントを使用しています。 私はルート/ creditreportとして「ループのXpath」が定義されているし、私のように一つ一つ何かをフィールドを読みました:

name xpath Element ResultType 
A  data1 Node  Valueof 
B  data1 Node  Valueof 
..... 
..... 
..... 
E  data3 Node  Valueof 
..... 
..... 
G  data3 Node  Valueof 

しかし、問題は、それがための最初の行のみを破砕し、二​​番目に欠けている、です。 XPATHループが終わるまでの理由は分かります。 'xpath loop'を 'root/creditreport/data3'と定義した場合、 'data3'要素の問題は解決されますが、他の要素も繰り返していて、私の問題の出発点に再び立ちます。

アドバイスありがとうございます!

+0

あなたは、第二の「creditreport」のレコードが処理されない意味やデータX要素の第二列のですか? – Cyrus

+0

@Cyrusデータの2行目DataX要素 –

答えて

2

親(DATAX)と子ノード(A、B、Cなど)の両方が/あなたが1つの非常に汎用的な設定をすることができ、本当にユニークな連続している場合:

使用/root/creditreport/*/*のXPathループ経路として

Field definitions in Get Data from XML

あなたにこのような出力を取得する必要があります:手動でこのようなフィールドを設定し

Output sample

ここから、データを非正規化したり、必要に応じて処理したりすることができます。最初のData3と2番目のData3を区別できるように、親レベルのノードのシーケンス番号を追加したことに注意してください。

一方、dataXノードはすべて同じ子ノードを持ちます、BA、A、BC、DなどではなくB)の場合は、/root/creditreport/*をxpathループパスとして使用し、親ノードフィールドをスキップして、値ノードAとBを通常どおり構成します。

ここに定義と出力があります。すべてのフィールドは、現在のノード(。)に関連して定義されます。

enter image description here

enter image description here

+0

うわー!!ちょうど私が欲しいもの。あなたは揺れる! –

+0

@ Cyrus-ちょっと小さな質問です。あなたの解決策で指定された2番目のオプション、すなわち/ root/creditreport/*を設定し、通常ノードを設定するとき、必要な行から離れていく空白行はほとんどありません。何か案が!! –

+0

例えば、に2つのエントリがと一緒にある場合は、と2つの空白行で2つの必須行として出力されています。 でも同様です。 –

関連する問題