XSLTバージョン: 1.0
データ(「レンダリング」方法):
データ(XMLとして保存される方法):
<data>
<item>
<row>Row1</row>
<col>Col2</col>
<value>323</value>
</item>
<item>
<row>Row2</row>
<col>Col1</col>
<value>12</value>
</item>
<item>
<row>Row2</row>
<col>Col2</col>
<value>53</value>
</item>
</data>
空の「セル」(Row1/Col1
)がXMLデータから完全に欠落していることに注意してください。
必要なもの:
空の「セル」がXML内の対応する空の要素を持つように、残りの「構造」に入力する必要があります。
<data>
<!-- New, "empty" item gets created -->
<item>
<row>Row1</row>
<col>Col1</col>
<value />
</item>
<!-- Output the others as before -->
<item>
<row>Row1</row>
<col>Col2</col>
<value>323</value>
</item>
<item>
<row>Row2</row>
<col>Col1</col>
<value>12</value>
</item>
<item>
<row>Row2</row>
<col>Col2</col>
<value>53</value>
</item>
</data>
キャッチ:
このサンプルデータは、私のターゲットデータセットよりもはるかに小さいです。実際のデータには、何百もの行と列があり、いたるところに空の「セル」があります。したがって、何もハードコーディングできません。
これまでの私の「解決策」:
Muenchian Groupingを使用して、すべての一意の列名と行名を選択することを検討しました。Row1/Col1
次に、それらを持って、各組み合わせ( 、、など)をトラバースし、ソースドキュメントにそれらの値を持つ要素がRow2/Col2
存在するかどうかを確認します。<item>
見つけたら、それを(その子孫と一緒に)コピーします。見つからない場合は、適切な「空の」要素を出力します。
それは私には手続き的すぎるように聞こえます(XSLTドキュメントを開始するのにさえ苦労しているようなものです)。より良い方法が必要です。
私はあなたが与えることができるどんなポインタにも感謝します。:)
アップデート:
残念ながら、このソリューションでは、値に連番が含まれる行と列を当てにすることはできません。それらは、デモンストレーションを容易にするためにこのように提示されているだけです。たとえば、の代わりに"Row2"
、その行の最初の列の値も"Peanut Butter and Jelly"
。
<item>
要素は、ソースXMLで順番に配列されます:左から右(列)、上から下(行)。