Document toolboxDocument toolbox

部屋リスト



ファイル名:

Room list.xfd

レベル:

Medium

レポートから XML:

Room -> Room list -> With area sums

XMLサンプルファイル:

xml/rooms.xml

キーコンセプト:

Repeating table, key/index

これは全部屋のシンプルなリストです。
これは、drofus-xml/room-containerのデータソースペイン(3)から<room> XMLノードをドキュメント(Global XSLT window) にドラッグするだけで、
作成された部屋の繰り返しテーブル(3.6参照)を持っています。

このレポートの "hard" な部分は、この部屋が置かれているトップ機能名 (デパートメント/部門)を示す3列目です。
この列のヘッダ・フィールドは、この機能レベルの説明を含む top <level>/トップ <レベル> 属性の説明を使用します。これは以下の式を使用します。

/drofus-xml/level[1]/@description

/drofus-xml/level[1]/@description

これは単純にドキュメントの最初のレベルのノードに行き、@description属性を取得します。

列の内容を取得するには、機能的な構造を表す<level>階層を見る必要があります。この場合、<room-container>と同じ部屋はすべて見つかりますが、
room-container/room/@id属性を参照する@ref属性を持つ部屋のみが見つかります。この部屋を参照できるようにするには、インデックスが必要です。
これを作成するには、Review (レビュー)->Global XSLT window (Global XSLTウィンドウ) に以下のコードを貼り付けます。

<xsl:key match="room" name="room-ref-key" use="@ref"/>

<xsl:key match="room" name="room-ref-key" use="@ref"/>

これにより、ref属性に基づいてすべての<room>ノードのインデックスが作成されます。これを利用して、現在処理中の部屋と同じ部屋を検索することができます。

key('room-ref-key', @id)

key('room-ref-key', @id)

この部屋の上のトップレベルも必要なので、フィールドの完全な式は次のようになります:

key('room-ref-key',@id)/ancestor::level[last()]/@name

key('room-ref-key',@id)/ancestor::level[last()]/@name

これは、レベルツリーで部屋を検索し、その上にあるすべてのレベルノードを取得し、最後のノードを選んでname属性を取得します。