2017-01-09 8 views
0

大きなXMLファイルをレコードカウンタに基づいて複数のファイルに分割する必要があります。XSLT 1.0を使用してXSLT 1.0をカウンタ値として使用するXMLファイルを分割する

特定のノード値は、ファイルごとに1回だけ使用できます。これらの値は、各ファイルにあるようにコピーする必要があります。 Likeヘッダー情報またはpurchaseOrder番号

私はxslt 1.0バージョンを使用する必要があります。私のミドルウェアシステムに2.0サポートパーサーがありません。 サンプルファイルは次のようになります。上記ファイルで

<?xml version="1.0" encoding="UTF-8"?> 
 
<ns0:HeaderOffile xmlns:ns0="http://cdpa.com/xix/ALS"> 
 
\t <EPBody> 
 
\t \t <EList> 
 
\t \t \t <AgEvent> 
 
\t \t \t \t <parentId>77777</parentId> 
 
\t \t \t \t <childId> 
 
\t \t \t \t \t <epic>400</epic> 
 
\t \t \t \t \t <epic>401</epic> 
 
\t \t \t \t </childId> 
 
\t \t \t \t <extensions> 
 
\t \t \t \t \t <SExtension> 
 
\t \t \t \t \t \t <epic>400</epic> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <PName>SERVICE</PName> 
 
\t \t \t \t \t \t \t <PValue>03</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t </SExtension> 
 
\t \t \t \t \t <OneTimeForFile> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <PName>ZFIELD1</PName> 
 
\t \t \t \t \t \t \t <PValue>ROYAL</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <ParameterName>ZFIELD2</ParameterName> 
 
\t \t \t \t \t \t \t <PValue>GOLD</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t </OneTimeForFile> 
 
\t \t \t \t </extensions> 
 
\t \t \t </AgEvent> 
 
\t \t \t <AgEvent> 
 
\t \t \t \t <parentId>88888</parentId> 
 
\t \t \t \t <childId> 
 
\t \t \t \t \t <epic>300</epic> 
 
\t \t \t \t \t <epic>301</epic> 
 
\t \t \t \t </childId> 
 
\t \t \t \t <extensions> 
 
\t \t \t \t \t <SExtension> 
 
\t \t \t \t \t \t <epic>300</epic> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <PName>SERVICE</PName> 
 
\t \t \t \t \t \t \t <PValue>03</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t </SExtension> 
 
\t \t \t \t </extensions> 
 
\t \t \t </AgEvent> 
 
\t \t \t <AgEvent> 
 
\t \t \t \t <parentId>99999</parentId> 
 
\t \t \t \t <childId> 
 
\t \t \t \t \t <epic>200</epic> 
 
\t \t \t \t \t <epic>201</epic> 
 
\t \t \t \t </childId> 
 
\t \t \t \t <extensions> 
 
\t \t \t \t \t <SExtension> 
 
\t \t \t \t \t \t <epic>200</epic> 
 
\t \t \t \t \t \t <NameValue> 
 
\t \t \t \t \t \t \t <PName>SERVICE</PName> 
 
\t \t \t \t \t \t \t <PValue>03</PValue> 
 
\t \t \t \t \t \t </NameValue> 
 
\t \t \t \t \t </SExtension> 
 
\t \t \t \t </extensions> 
 
\t \t \t </AgEvent> 
 
\t \t </EList> 
 
\t </EPBody> 
 
</ns0:HeaderOffile>

Iは、それぞれ100個のAGEventノードについては、例えば、Iが設定されたカウントのAGEventノードでファイルを分割する必要があります。ファイルに560のAGEventノードがある場合、5つのファイルにそれぞれ100個のファイルが6つあり、最後の6番目のファイルには60個のAGEventノードがあります。

OneTimeForFileノードは、入力ファイルで1回だけ使用できるため、ファイルごとに1回目のAGEventノードに1回コピーする必要があります。

完全なXSLTスクリプトを作成して私に質問をさせてください。 ウェブを検索して問題の解決策を見つけました。

私はpost hereで試しました!達成されていません。 あなたの貴重な時間を高く評価します。 ありがとうございます。

+0

XSLT 1.0では、入力を複数の出力ファイルに分割する手段がありません。あなたのプロセッサがそれをサポートしているなら、EXSLTの 'exsl:document'拡張命令を使うことができます。それ以外の場合は、パラメータを100ずつ増やすたびに複数の変換を実行するように、呼び出し側アプリケーションに指示する必要があります。呼び出し側アプリケーションに 'AGEvent'ノードの総数を渡す方法を見つける必要があります。 - P.S.あなたがリンクしている質問には何の関係もありません。 –

+0

それを調べてくれてありがとう。私はそれを解決した。 – Nag

答えて

0

XSLT 1.0を使用して複数のファイルにファイルを分割するための唯一の2つの方法があります。

  1. 使用ベンダー拡張が。そのためには、使用しているXSLTプロセッサーを知る必要があります。
  2. 出力ファイルごとに1つずつ複数の変換を使用します。通常、スタイルシートにパラメータを指定して、特定の実行ごとに生成するパーティションを指定します。そのためには、どのように変換を呼び出すかについてもっと知る必要があります。
+0

それを調べていただきありがとうございます。私はXSLTを使用します。私は自分が望むものを解決しました。 – Nag

+1

あなたが提起した問題を解決した場合は、将来のビジターへの礼儀として、質問に対する答えとしてあなたの決議を含めてください。 –

関連する問題